欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python:面向对象(类)

程序员文章站 2022-06-10 23:14:08
...
python:面向对象(类)

类定义:Python3中,如果新建的类没有继承任何其他类,默认继承基础类object。Python2中如果没有显式继承object类就是经典类,而显式继承了object类就是新式类,Python2推荐使用新式类。

2、类变量:类变量就是直接在类中,但是在方法外定义的变量。类变量是所有该类的实例所共有的,且类的每个实例都可以修改类变量。

3、成员变量:成员变量就是在定义时加了self前缀的变量,一般在__init__方法就定义了,成员变量会跟着实例“一起走”。

4、类的继承:直接在类后括号里加上要继承的类就行,继承多个类时,类之间用逗号分隔即可。

5、成员方法:新建方法时默认为新建一个成员方法,方法的第一个参数必须为self,self代表着实例本身,相当于每次都会将实例本身当参数传进去。

6、类方法:方法“头上”加上装饰器@classmethod,方法的第一个参数必须为cls,代表着类本身。

7、静态方法:方法“头上”加上装饰器@staticmethod,即普通函数,参数没有强制要求。

8、特殊方法:

__init__:类的初始化方法,在一个类实例化之后会自动调用这个方法,实例化时传进去的参数也是按这个初始化方法来定的。
__new__:类的构造方法,该方法返回本类的一个实例。执行完此方法后,会自动调用类的__init__方法来初始化该实例,需要注意的是,如果自己重写了这个方法,一定要返回本类的实例,否则执行__new__后不会调用__init__。
__call__:当一个实例对象以函数的形式调用时,就会执行此方法,前提是类中已经定义了此方法,没有定义的话,就会报错。例如:a = A(),a()就会调用类A中__call__方法,当然,如果没有定义__call__,就会报错。
__str__:面向用户的方法,使用print打印类实例时,如果类重写了方法__str__,会优先打印输出__str__的返回值,如果没有重写这个方法就会打印__repr__方法的返回值。
__repr__:面向Python本身的方法,默认返回值为类实例的内存地址,直接输出者类实例时,如在Python的IDLE中直接“>>> a”(a为类A的实例),就会打印__repr__的返回值。

# 推荐使用新式类,即继承object
class User(object):
    name = 30  
    age = 50

    #构造函数
    def __init__(self, para1, para2):
        self.para1 = para1
        self.para2 = para2

    def func1(self):
        print('hello, guys!')

    def func2(self, para3):
        self.para3 = para3

    @staticmethod
    def func3():
        return 'static method'

    @classmethod
    def func4(cls):
        cls.name = 'lisi'

user1 = User('hi', 'hello')
user2 = User('python', 'java')
user1.func1()
user2.func1()
user1.func2('hei!')
print(user1.name)
print(user2.age)
print(user2.para1)
print(user1.para2)
print(user1.para3)
相关标签: python