面向对象的程序设计(OOP)
对象(object): 将属性和方 法封装在一起。
类(class):
具有相同的属性和方法的对象集合。
对象是类的实例
子类继承了父类的全部属性和方法, 并且也有自己特有的属性和方法。
继承描述了类之间的层次关系
声明类
class 类名:
类属性=初值
方法(参数列表)
访问类属性
类名. 类属性
对象名.类属性
#类
class Person():#成员变量 类属性money=100000#成员函数 类方法def say_hello(self):#方法中必须有一个参数self,而且它是参数列表中的第一个参数#由同一个类可以生成很多个对象,每一个对象,都有一个专属的self,代表这个对象自身print("hello")
#创建对象
zhangsan = Person()
#访问对象类属性成员变量
print(zhangsan.money)
#这是一个动态添加的实例属性,它只属于zhangsan自己,如果重新创建其他的Person()对象,是没有这个属性的
zhangsan.major="computer"
print(zhangsan.major)
#访问类属性成员函数
zhangsan.say_hello()
Person.money=12#修改类属性,所有实例的值都会发生变化。
#删除对象
del zhangsan
构造函数:
(可以省略)
__init__(self, 参数2, 参数3, ....)
在创建对象时,用来完成初始化操作。
当创建对象时,系统会自动调用构造函数。
可以把对成员变量赋初值的语句写在构造函数中,从而保证每个变量 都有合适的初始值
析构函数:
(可以省略)
__del__( )
在清除对象时,回收和释放对象所占用的资源。
class Person:#在Python中,构造函数和析构函数也可以省略。#构造函数:在创建对象时,用来完成初始化操作。#当创建对象时,系统会自动调用构造函数。#gender="男"默认初值def __init__(self,name,age,gender="男"):self.name=nameself.age=ageself.gender=gender#析构函数:在清除对象时,回收和释放对象所占用的资源def __del__(self):print("Bye bye from",self.name)def printInfo(self):print("姓名:",self.name,"年龄:",self.age,"性别:",self.gender)zhangsan = Person("张三",18)
lisi = Person("李四",19,"女")
zhangsan.printInfo()
lisi.printInfo
del zhangsan
del lisi
静态方法和类方法
类方法
可以通过类名或者对象调用。
不能访问实例属性,但可以访问类属性(类声明时就有的)
class 类名:
@classmethod
def 类方法名(cls,):
方法体
静态方法
可以通过类名或者对象名调用,
不能访问实力属性,也不能直接访问类属性,但是可以通过类名引用类属性
class 类名:
@staticmethod
def 类方法名():
方法体
公有变量和私有变量
公有变量:可以在类的外部访问
保护变量:值允许其本身和子类进行访问
私有变量:不允许在类的外部访问
__XXX:私有变量
_XXX:保护变量
__XXX__:专有变量,方法
继承:
子类能够继承父类中所有非私有的成员变量和成员函数
class 子类名(父类名)
类属性=初值
方法(参数列表)
class Person1():money=10000def syahello(self):print("hello1234567")
class Teacher(Person1):pass
amy = Teacher()
print(amy.money)
amy.syahello()