类与对象
类属性,
类变量
调用方式:类名.变量名或者self.__class__.变量名
实例变量
调用方式:对象名.变量名或者self.变量名
类方法,
属于类的方法默认函数参数是cls,代表类本身,需要@classmethoo作为装饰符
调用方式:类名.类方法(需要加括号)
类的私有属性
类的里面有私有方法和私有属性,私有属性或方法不能在类的外部被访问使用
私有方法必须有self参数,且把它作为第一个参数.
这样的做法是为了保证程序的安全性,这就是封装.
@property的用法与神奇之处
假设给某个函数装上了这个装饰器,那么就当作伪属性来调用了.
调用方式:对象.函数(无需加括号)
类的继承
一个儿子可以有多个爸爸,并会爸爸的技能.QAQ
需要手动调用父类构造方法,父类名.__init__(self,变量,变量)
注意子类的构造变量必须得和父类的构造变量相同,才能把子类的变量,
传递给父类构造方法.
super()调用父类方法
super().父类方法()(调用不想要加self) = 父类.父类方法(self),(需要加self)
以上那个方法需要参数就写参数,不要需要直接:对象.方法.() .ok.希望我自己看得懂.
class A:
#私有方法和私有变量,无法从外部访问,类属性和对象变量都可以伪装成私有变量
a = 0 #类属性
def __init__(self,name,age):#构造方法
self.name = name #对象变量
self.__age = age #私有变量,只能在内部调用
A.a += 1 #每创建个实例对象就加1用来统计对象
def study(self):#属于公有方法,外部内部都能调用:self.方法()
print("姓名:{},年龄:{}".format(self.name,self.__age))
def __age1(self): #私有方法,只能在内部调用
print('师生数量:{}'.format(A.a))
def hello(self):
self.__age1() #内部调用方法
print(self.__age) #内部变量调用
self.study()
@property
def user(self): #有@property装饰器后就伪装成了属性,不用加括号就能调用
self.hello()
@classmethod #类方法
def name(cls): #调用类的变量
print(cls.a)
user = A('licheng',19) #创建实例对象
user.study() #打印学习信息
user.hello() #调用实例的hello方法,hello方法又调用私有方法
print(user.name,) #对象调用实例变量和私有变量,
print(A.a) #访问类变量
user.user #调用实例伪属性方法
A.name()#调用类方法