上一篇文章:Python函数定义与使用
下一篇文章:Python模块
1、定义类、创建对象、__init__
实例:
class People():"""定义一个People类"""#__init__方法是类创建对象时默认运行的函数,用来进行初始化操作,不需要手动调用def __init__(self,name,age):"""初始化属性"""self.name=nameself.age=agedef run(self):print("%s,快跑,帅到被人砍"%self.name)#定义对象
mark=People("mark",18)
mark.run()#返回对象在内存中的地址
print(mark)
结果:
mark,快跑,帅到被人砍
<__main__.People object at 0x103b5c1d0>
2、__str__:定义类的描述
如果直接print(对象)&#xff0c;会直接返回该对象在内存中的地址&#xff0c;现在我们想要不直接返回这个地址呢&#xff1f;
实例&#xff1a;
class People():"""定义一个People类"""#__init__方法是类创建对象时默认运行的函数&#xff0c;用来进行初始化操作,不需要手动调用def __init__(self,name,age):"""初始化属性"""self.name&#61;nameself.age&#61;agedef run(self):print("%s,快跑&#xff0c;帅到被人砍"%self.name)def __str__(self):msg&#61;"我是一个类的介绍&#xff0c;我的作者是个大帅哥?️"return msg#定义对象
mark&#61;People("mark",18)
mark.run()#返回对象在内存中的地址
print(mark)
结果&#xff1a;
mark,快跑&#xff0c;帅到被人砍
我是一个类的介绍&#xff0c;我的作者是个大帅哥?️
3、私有属性、方法
只需要在属性变量名或方法名前加上__就表示是私有的了&#xff0c;简单吧?
实例
class People():"""定义一个People类"""#__init__方法是类创建对象时默认运行的函数&#xff0c;用来进行初始化操作,不需要手动调用def __init__(self,name,age):"""初始化属性"""#私有属性nameself.__name&#61;nameself.age&#61;agedef run(self):self.__test()def __test(self):print("%s,快跑&#xff0c;帅到被人砍" % self.__name)def __str__(self):msg&#61;"我是一个类的介绍&#xff0c;我的作者是个大帅哥?️"return msg#定义对象
mark&#61;People("mark",18)
mark.run()#返回对象在内存中的地址
print(mark)
结果&#xff1a;
mark,快跑&#xff0c;帅到被人砍
我是一个类的介绍&#xff0c;我的作者是个大帅哥?️
4、__del__():析构函数
对象被销毁时调用
实例&#xff1a;
class People():"""定义一个People类"""#__init__方法是类创建对象时默认运行的函数&#xff0c;用来进行初始化操作,不需要手动调用def __init__(self,name,age):"""初始化属性"""#私有属性nameself.__name&#61;nameself.age&#61;agedef run(self):self.__test()def __test(self):print("%s,快跑&#xff0c;帅到被人砍" % self.__name)def __str__(self):msg&#61;"我是一个类的介绍&#xff0c;我的作者是个大帅哥?️"return msgdef __del__(self):print("%s因为太帅了&#xff0c;要被干掉了"%self.__name)#定义对象
mark&#61;People("mark",18)
mark.run()#返回对象在内存中的地址
print(mark)#删除销毁对象
del mark
结果&#xff1a;
mark,快跑&#xff0c;帅到被人砍
我是一个类的介绍&#xff0c;我的作者是个大帅哥?️
mark因为太帅了&#xff0c;要被干掉了
5、继承
私有方法和属性不会被继承
单继承
实例&#xff1a;
class Animal():def __init__(self,name,age):self.__name&#61;nameself.age&#61;ageclass Dog(Animal):def __init__(self,name,age):#调用父类方法super().__init__(name,age)def getAge(self):print("小狗年龄&#xff1a;",self.age)dog&#61;Dog(name&#61;"xDog",age&#61;5)
dog.getAge()
结果&#xff1a;
小狗年龄&#xff1a; 5
多继承
实例&#xff1a;
#python默认所有类都继承object&#xff0c;可写可不写
class Base(object):def test(self):print("Base--test")class A(Base):def test(self):print("A--test")class B(Base):def test(self):print("B--test")class C(A,B):#pass表示暂时不写代码passc&#61;C()
c.test()
结果&#xff1a;
A--test
6、类属性、实例属性
实例&#xff1a;
#python默认所有类都继承object&#xff0c;可写可不写
class Base(object):#共有类属性name&#61;"mark"#私有类属性__age&#61;18#我的年龄是保密的哟passbase&#61;Base()
print(base.name)
print(Base.name)
#下面两句句运行错误,不能在类外访问私有属性
#print(base.__age)
#print(Base.__age)
结果&#xff1a;
mark
mark
7、类方法、静态方法
修饰器&#64;classmethod来标识类方法&#xff0c;第一个参数必须是类对象修饰符&#64;staticmethod来标识静态方法
实例&#xff1a;
#python默认所有类都继承object&#xff0c;可写可不写
class Base(object):#共有类属性name&#61;"mark"#私有类属性__age&#61;18#我的年龄是保密的哟#类方法&#64;classmethoddef changeAge(cls):cls.__age&#43;&#61;1return cls.__age&#64;staticmethoddef staticFun():return "类静态方法被调用"base&#61;Base()
#实例调用类方法
print(base.changeAge())
#类调用类方法
print(Base.changeAge())#实例调用类静态方法
print(base.staticFun())
#类调用类静态方法
print(Base.staticFun())
结果&#xff1a;
19
20
类静态方法被调用
类静态方法被调用
8、__new__:创建实例时调用
第一个参数必须是类对象。必须要有返回值&#xff0c;返回的是实例化后的对象&#xff0c;可以return 父类的__new__或者object的这个方法。
实例&#xff1a;
class Base(object):def __init__(self):print("__init__被调用了")def __new__(cls, *args, **kwargs):print("__new__被调用了")return super().__new__(cls)base&#61;Base()
结果&#xff1a;
__new__被调用了
__init__被调用了