-
创建类:
class Animal():pass
dog = Animal()
cat = Animal()print(dog)
print(cat)
print(dog == cat)pass用于占位
<__main__.Animal instance at 0x7f12ce9a0050>
dog 是类动物(__main__.Animal)的实例(object)存放在地址(at 0x7f12ce9a0050)
查看全部 -
多态方法实际调用的时候,会首先查找自身的定义,如果自身有定义,则优先使用自己定义的函数;如果没有定义,则顺着继承链向上找
查看全部 -
1. class Student()定义的时候,需要在括号内写明继承的类Person
2. 在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性
查看全部 -
初始化实例时,如果调用类的属性,必须用类名.属性
查看全部 -
多态
从定义上来讲,Student和Teacher都拥有来自父类Person继承的who()方法,以及自己定义的who()方法。但是在实际调用的时候,会首先查找自身的定义,如果自身有定义,则优先使用自己定义的函数;如果没有定义,则顺着继承链向上找
多重继承
在多重继承里,A虽然被继承了两次,但是__init__()的方法只调用一次。
多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。
查看全部 -
这说明在一条继承链上,一个实例可以看成它本身的类型,也可以看成它父类的类型。
isinstance也可以用于Python自有数据类型的判断。
通过函数isinstance()可以判断一个变量的类型。
查看全部 -
class Student()定义的时候,需要在括号内写明继承的类Person
在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性
查看全部 -
is才是继承关系
查看全部 -
python定义类方法
类方法和实例方法是不同的
类方法需要使用@classmethod来标记为类方法,否则定义的还是实例方法
类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.__localtion 实际上相当于Animal.__localtion。
因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。
查看全部 -
注意,在外部调用实例方法时,是不需要显式传递self参数的。
另外,通过定义实例方法来操作私有属性的这种方法是推荐的,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。
当然,实例方法并不仅仅是为私有属性服务的,我们可以把和类的实例有关的操作都抽象成实例方法,比如:打印实例的详细信息等等。在上面的定义,name是实例的私有属性,从外部是无法访问的,而get_name(self) 就是一个实例方法,在实例方法里面是可以操作私有属性的,注意,它的第一个参数是self。
另外,__init__(self, name)其实也可看做是一个特殊的实例方法。
通过定义get_name(self)方法,在外部就可以通过这个方法访问私有属性了
查看全部 -
并不是所有的属性都可以被外部访问的,这种不能被外部访问的属性称为私有属性。私有属性是以双下划线'__'开头的属性
在外部访问私有属性将会抛出异常,提示没有这个属性。
虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。私有属性是为了保护类或实例属性不被外部污染而设计的
查看全部 -
在类属性和实例属性同时存在的情况下,实例属性的优先级是要高于类属性的,在操作实例的时候,优先是操作实例的属性。
另外,当实例没有和类同名的时候,通过实例对象,依然可以访问到类属性。因此,需要特别注意,尽量不要通过实例来修改类属性,否则很容易引发意想不到的错误。
把count改为私有__count,这样实例变量在外部无法修改__count
查看全部 -
在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:
查看全部 -
type()获取变量的类型
dir()获取变量的所有属性,返回的是字符串列表
getattr()获取对象的属性
setattr()设置新的对象属性
查看全部 -
私有属性是以双下划线开头的属性
查看全部
举报