珠海柏泰教育官方网站建设,天猫网站建设论文,伊宁市建设局网站,沙田东莞网站建设目录
一些解释
属性 类名建议首字母大写#xff0c;通常用驼峰规则命名。变量名建议小写#xff0c;下划线隔开。类最基本的作用是封装。
写在类内非方法中的语句在类加载的时候会执行#xff0c;且只会执行一次#xff0c;例如下面的print语句#xff0c;类加载时就会…
目录
一些解释
属性 类名建议首字母大写通常用驼峰规则命名。变量名建议小写下划线隔开。类最基本的作用是封装。
写在类内非方法中的语句在类加载的时候会执行且只会执行一次例如下面的print语句类加载时就会打印Person类 2。类属性在类加载的时候定义。
class Person(object):sex male # 类属性money 2 # 类属性def __init__(self, name, ageNone): # 实例方法之构造方法self.name name # 实例属性self.age age # 实例属性def run(self): # 实例方法print(self.get_sex())return f{self.name} 在跑# 类加载的时候会执行且只会执行一次print(fPerson类 {money})classmethoddef get_sex(cls): # 类方法print(cls.get_money())return fPerson类 {cls.sex}staticmethoddef get_money(): # 静态方法return fPerson类staticmethod {Person.money}if __name__ __main__:print( * 20)print(Person.get_money())print( * 20)print(Person.get_sex())print( * 20)alice Person(alice, 2)print(alice.run())
一些解释
self 定义访问修改实例属性、调用方法通过self.一般用于实例方法作为第一个形参代表当前实例必须传入在通过实例对象.调用实例方法的时候python解释器会自动将实例对象传给self这也就是为啥在实例方法里面可以通过self.访问实例属性、方法因为其绑定到了当前对象cls 调用类方法通过cls.一般用于类方法作为第一个形参代表当前类必须传入在通过类名.调用类方法的时候python解释器会自动将类传给cls这也就是为啥在类方法里面可以通过cls.访问实例属性、方法因为其绑定到了当前类
属性
类属性 定义于类中个各方法的外部在类加载的时候定义建议通过类名.直接调用和修改在类方法中建议通过cls.虽然类名.也可以但是不便于维护类属性建议通过cls.、类名.访问修改类属性可以通过self.、实例对象.访问但是不能通过它修改因为表面看上去修改了它的值其实是给当前对象定义访问、修改了一个与类属性同名的实例属性特别的当我们在类的外部通过实例对象.就会更可怕因为只有该实例对象拥有了这个与类属性同名的实例属性其它的实例对象没有该实例属性。实例属性 定义在实例方法内部建议定义在__init__构造函数内部这样我们对类进行实例化的时候这个实例化对象就会拥有其实例属性不需要我们显示的调用。若定义在其它实例方法内部则直到调用那个实例方法该对象才会拥有那些属性因其定义在实例方法内部所以我们必须通过self.来定义访问修改不加self.仅是该实例方法的局部变量而不属于实例属性
方法
实例方法
可访问修改实例属性通常只能访问类属性self.不能修改类属性只是创建了同名的实例属性但是可以通过类名.强制修改类属性通过对象名.调用在实例方法内可以直接通过self.调用构造方法是特殊的实例方法__init__(self)自动执行可以不写return此时返回类型是None不能强制返回其他类型
类方法
不可访问实例属性可以访问修改类属性通过类名.调用也可通过对象名.调用不推荐在类方法内可以直接通过cls.调用
静态方法定义加staticmethod不用多传一个形参。可以用类也可以用对象调用静态方法静态方法也可以访问类变量和类方法没啥太多区别在静态方法中不可以访问实例变量。不推荐用静态方法因为静态方法不是很能体现面向对象的特点。
不可访问实例属性可以访问修改类属性通过类名.通过类名.调用也可通过对象名.调用不推荐
通过在方法名前加__将方法变为私有的在外部不可以通过对象名/类名.__方法名访问。python在类外部可以通过对象名.变量名添加实例变量。严格来讲python并没有真正的私有变量因为可以通过对象名._类名__变量名。 继承
python支持多继承和多重继承。魔法方法类名.__mro__可以查看继承顺序。 例如上图图上的左右是继承时写在括号中的左右的顺序继承顺序由先至后如下这也是继承时不同的父类有同名属性和同名方法的查找路径。 class __main__.E, class __main__.D1, class __main__.C1, class __main__.C2, class __main__.B1, class __main__.A1, class __main__.A2, class object class __main__.E, class __main__.A3, class __main__.C2, class __main__.D1, class __main__.C1, class __main__.B1, class __main__.A1, class __main__.A2, class object class __main__.E, class __main__.D1, class __main__.C1, class __main__.B1, class __main__.A1, class __main__.B2, class __main__.C2, class __main__.B3, class __main__.A2, class object 我们可以看到大致路径是这样的先从最左边的父类一步一步往上找每次也只找最左侧的父类类似于深度搜索若是发现该父类还有其它子类则我们回过头去走那些没有走过的路例如到了A2发现还可以从E-D1-C2-B3其中只有C2-B3未遍历所以加进去