Python类的基本使用方法有哪些

1、面向对象

类(class):是一种用来描述具有相同属性和方法的对象的集合。

类变量:类变量在整个实例化的对象中是公用的。一般定义在类中且在函数体之外。

方法:类中的函数

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

局部变量:定义在方法中的变量,只作用于当前实例的类。

实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。就像我们定义一个fruit(水果)类,然后又定义了一个fruit类的派生类apple(苹果),它有着fruit类的一些属性和方法,也有着自己的一些独特的属性和方法,和fruit类是一种’is-a’的关系。

实例化:类的一个具体对象,类像当于一个模板,只有我们将其实例化为一个对象后才能对其进行相应的操作。

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

2、类定义

定义一个类:

class ClassName:....    ....    ....

登录后复制

类名建议采用驼峰式命名,或者全部大写字母

3、使用类对象方法

类对象支持两种操作:属性引用和实例化

属性引用:和python中的其他语法一样,obj.name

在类中带__的属性为类的私有属性,私有属性在类外部无法直接访问,像__name.

class Fruit:#这是类的一个基本属性self.number = 100def get_number(self):                a = self.number + 100return af = Fruit()print('We have {0} fruits'.format(f.number))print('We have {0} fruits'.format(f.get_number()))

登录后复制

输出结果:

We have 100 fruitsWe have 200 fruits

登录后复制

4、构造方法

python类中有一个名为__init__()的特殊方法,叫构造方法,该方法在类进行实例化时会自动进行调用(可以用于类属性初始化等),类似C++里面类的构造函数。

def __init__(self):self.data = []

登录后复制

类定义了 __init__() 方法,类的实例化操作会自动调用__init__()方法。

class Fruit:def __init__(self):                print('你已经实例化了一个对象')f = Fruit()

登录后复制

输出结果

你已经实例化了一个对象

登录后复制

init_() 方法可以有参数,参数通过 init() 传递到类的实例化操作上。

class Complex:def __init__(self,real,image):self.r = realself.i = imagedef get_complex(self):                print('complex real is %.2f , image is %.2f'%(self.r,self.i))a = Complex(3.5,-3)a.get_complex()

登录后复制

输出结果如下:

complex real is 3.50 , image is -3.00

登录后复制

self代表类的实例,而非类。类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。但self并不是Python中的关键字哦。

不知是否可以这样理解,self就代表的是你按照一个类实例化一个对象后的对象的地址。很像C++类中this指针

class Test:def prt(self):        print(self)        print(self.__class__)t = Test()t.prt()

登录后复制

输出:


登录后复制

5、类的方法

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数。如果不需要self传递参数,需要在函数前面加上@staticmethod,表示静态方法

class Complex:def __init__(self, real=None, image=None):self.r = realself.i = imagedef get_complex(self):        print('complex real is %.2f , image is %.2f' % (self.r, self.i))    @staticmethoddef test(a, b):        print('complex real is %.2f , image is %.2f' % (a, b))a = Complex(3.5, -3)a.get_complex()b = Complex()b.test(3, -2)

登录后复制

输出结果

complex real is 3.50 , image is -3.00complex real is 3.00 , image is -3.00

登录后复制

6、继承

Python 同样支持类的继承,格式如下:

class Derivedclassname(Baseclassname):    ...    ...

登录后复制

Baseclassname(基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用:

class Fruit:    def __init__(self,sweet):        self.sweetness = sweet    def describe(self):        print('Our fruit has a sweetness of %.2f'%self.sweetness)class Apple(Fruit):#单继承,继承fruit类    def __init__(self,sweet,color):        self.color = color        Fruit.__init__(self,sweet)    def describe(self):#改写基类fruit的方法        print('Our apple has a sweetness of {0:.2f}%,and color is {1}'.format(self.sweetness,self.color))apple = Apple(62.2,'red')apple.describe()

登录后复制

输出:

Our apple has a sweetness of 62.20%,and color is red

登录后复制

多继承

Python同样可以继承多个基类:

class Derivedclassname(basename1,basename2,...):    ...    ...    ...

登录后复制

需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法。

class Fruit:def __init__(self, sweet):        self.sweetness = sweetdef describe(self):        print('Our fruit has a sweetness of %.2f' % self.sweetness)class Food:def __init__(self, uprice, num):        self.unit_price = uprice        self.number = num        self.total_price = num * upricedef cost(self):        print('You need to pay {0:.3} yuan, thank you'.format(self.total_price))class Apple(Fruit, Food):def __init__(self, sweet, color, uprice, num):        self.color = color        Fruit.__init__(self, sweet)        Food.__init__(self, uprice, num)def describe(self):        print('Our fruit has a sweetness of {0:.2f}%,and color is {1}'.format(self.sweetness, self.color))

登录后复制

apple = Apple(62.2,'red',3.5,21)apple.describe()apple.cost()

登录后复制

输出:

Our fruit has a sweetness of 62.20%,and color is redYou need to pay 73.5 yuan, thank you

登录后复制

7、方法重写

如果父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法,如果想调用已经被覆盖的基类方法,可以用super(子类名,子类实例对象名).父类方法

class Parent_class:def Method(self):         print ('父类方法')class Child_class(Parent_class): # 定义子类def Method(self):        print ('子类方法')c = Child_class()                # 子类实例化c.Method()                  # 子类调用重写方法super(Child_class,c).Method()    #用子类对象调用父类已被覆盖的方法

登录后复制

子类继承父类构造函数

如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。

class A:def __init__(self, x, y):        self.x = x        self.y = y        print('pos is ({0},{1})'.format(self.x, self.y))def xxx(self):        print('parent now')class B(A):def xxx(self):        print('child now')b = B(10, 3)b.xxx()

登录后复制

输出

pos is (10,3)child now

登录后复制

如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__。

如果重写了__init__ 时,要继承父类的构造方法,可以使用 super 关键字super(子类,self).__init__(参数1,参数2,….),或者父类名称.__init__(self,参数1,参数2,…)

8、类的私有属性

两个下划线开头,声明该属性为私有,像__name不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__name。

class JustCounter:     __secretCount = 0  # 私有变量    publicCount = 0  # 公开变量def count(self):        self.__secretCount += 1        self.publicCount += 1       print(self.__secretCount)counter = JustCounter()counter.count()counter.count()print(counter.publicCount)print(counter.__secretCount)  # 报错,实例不能访问私有变量

登录后复制

Traceback (most recent call last):File "test.py", line 16, in     print (counter.__secretCount)  # 报错,实例不能访问私有变量AttributeError: 'JustCounter' object has no attribute '__secretCount'

登录后复制

两个下划线开头,声明该方法为私有方法,像__private_method,只能在类的内部调用 ,不能在类的外部调用。self.___private_method。

class Site:def __init__(self, name, url):        self.name = name  # public        self.__url = url  # privatedef who(self):        print('name  : ', self.name)        print('url : ', self.__url)def __foo(self):  # 私有方法        print('这是私有方法')def foo(self):  # 公共方法        print('这是公共方法')        self.__foo()x = Site('***', 'www.xxx.com')x.who() # 正常输出x.foo() # 正常输出x.__foo()  # 报错

登录后复制

输出:

'''name  :  ***url :  www.***.com这是公共方法这是私有方法Traceback (most recent call last):  File "F:PythonProgramest.py", line 61, in     x.__foo()      # 报错AttributeError: 'Site' object has no attribute '__foo''''

登录后复制

类的专有方法

__init__ : 构造函数,在生成对象时调用,类似C++构造函数

__del__: 析构函数,释放对象时使用,类似C++析构函数,常用在释放申请的内存空间

__repr__: 打印,转换。这个个函数就是在打印类的时候,控制类输出的字符串

class Name:def __init__(self, name):        self.name = nameprint(Name('s'))

登录后复制

''''''

登录后复制

class Name:def __init__(self,name):        self.name = namedef __repr__(self): #控制了在打印类时候的输出          return 'Name({!r})'.format(self.name)print(Name('s'))'''Name('s')'''

登录后复制

__setitem__ : 每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环

__getitem__: 当访问不存在的属性时会调用该方法

__len__: 获得长度,如果一个类表现得像一个list,要获取有多少个元素,就得用len() 函数。要让len()函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数。

class CountList:def __init__(self, *args):        self.list = [x for x in args]        self.count = self.__len__()def __len__(self):         return len(self.list)def get_count(self):         return self.counta = CountList(1, 2, 3, 4, 4, 5)print(a.get_count())print(len(a))

登录后复制

__cmp__: 比较运算

__call__: 函数调用

__add__: 加运算

__sub__: 减运算

class MyClass:def __init__(self, height, weight):        self.height = height        self.weight = weight# 两个对象的长相加,宽不变.返回一个新的类def __add__(self, others):        return MyClass(self.height + others.height, self.weight + others.weight)# 两个对象的宽相减,长不变.返回一个新的类def __sub__(self, others):        return MyClass(self.height - others.height, self.weight - others.weight)# 说一下自己的参数def intro(self):        print("高为", self.height, " 重为", self.weight)def main():    a = MyClass(height=10, weight=5)    a.intro()    b = MyClass(height=20, weight=10)    b.intro()    c = b - a    c.intro()    d = a + b    d.intro()if __name__ == '__main__':    main()

登录后复制

'''高为 10  重为 5高为 20  重为 10高为 10  重为 5高为 30  重为 15'''

登录后复制

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方

同样的。类的专有方法也可以重写

以上就是Python类的基本使用方法有哪些的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2235147.html

(0)
上一篇 2025年2月26日 17:54:01
下一篇 2025年2月26日 17:54:23

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python的五个具有钱途和潜力的岗位

    从2015开始国内就开始慢慢接触Python了,从16年开始Python就已经在国内的热度更高了,目前也可以算的上”全民Python”了。 众所周知小学生的教材里面已经有Python了,国家二级计算机证也需要学习Py…

    2025年2月26日 编程技术
    200
  • Python怎么实现发送声情并茂的邮件内容和附件

    1.准备工作 在开始之前,我们需要准备一些东西。首先,我们需要安装python。python可以从官方网站下载。 其次,我们需要安装smtplib库。这可以通过以下命令在终端中完成: pip install smtplib 登录后复制 2.…

    2025年2月26日 编程技术
    200
  • Python之Pygame的Event事件模块怎么使用

    Pygame的Event事件模块 事件(event)是 pygame 的重要模块之一,它是构建整个游戏程序的核心,比如常用的鼠标点击、键盘敲击、游戏窗口移动、调整窗口大小、触发特定的情节、退出游戏等,这些都可以看做是“事件”。  事件类型 …

    编程技术 2025年2月26日
    200
  • 使用Python进行交易策略和投资组合分析

    我们将在本文中衡量交易策略的表现。并将开发一个简单的动量交易策略,它将使用四种资产类别:债券、股票和房地产。这些资产类别的相关性很低,这使得它们成为了极佳的风险平衡选择。 动量交易策略 这个策略是基于动量的的,因为交易者和投资者早就意识到动…

    2025年2月26日 编程技术
    200
  • python包如何使用

    python 包的模块 函数 类 定义 导入使用详细说明 下面是一个使用 python 包的详细案例,它涉及到模块、函数和类的定义、导入以及使用: 首先,我们创建一个名为 my_package 的目录,作为包的根目录。在其中创建以下文件: …

    编程技术 2025年2月26日
    200
  • Python列表解析和生成器表达式的结构是什么

    列表解析与生成器表达式 生成器表达式是生成容器的一种简洁方式。最常见的是,你会听到列表解析,但也存在集合解析和字典解析。但是,术语上的差异有些重要:如果你实际上是在制作列表,那么它只是一个列表解析。 生成器表达式用括号括起来( ),而列表解…

    编程技术 2025年2月26日
    200
  • Python catplot函数自定义颜色的方法是什么

    一、catplot函数 catplot() 函数是 seaborn 中一个非常有用的函数,它可以绘制分类变量的图形,并可以根据另一个或多个变量进行分组。使用不同的图表类型,catplot() 函数可以创建适当的图表。 默认情况下,catpl…

    2025年2月26日 编程技术
    200
  • Python怎么用Gradio与EasyOCR构建在线识别文本的Web应用

    一、Gradio是什么 gradio是一个开源的 python 库,用于构建机器学习和数据科学演示和 web 应用。 官网:https://www.gradio.app/ Gradio适用于: 演示客户/合作者/用户/学生的机器学习模型。 …

    2025年2月26日 编程技术
    200
  • 如何利用Python实现模拟登录知乎

    环境与开发工具 在抓包的时候,开始使用的是chrome开发工具中的network,结果没有抓到,后来使用fiddler成功抓取数据。下面逐步来细化上述过程。 模拟知乎登录前,先看看本次案例使用的环境及其工具: Windows 7 + Pyt…

    2025年2月26日 编程技术
    200
  • Python怎么使用json数据键值对遍历

    Python对于json数据键值对遍历 python中可以使用json模块来解析json格式的数据,将其转换成python中的字典或者列表对象。对于json数据中的键值对的遍历,我们可以通过python中字典或者列表的遍历方式来实现。 例如…

    编程技术 2025年2月26日
    200

发表回复

登录后才能评论