python学习笔记(2018.2.9)
1.私有属性:类中的属性前一般加2个下划线,便于保护属性,不让实例直接进行修改,所以类里面会有相应的两个方法用来修改和获取属性,如:
1 class Dog(object): 2 3 def __init__(self,name,age,high): 4 5 self.__name=name #私有属性 6 7 self.__age=age
self.high=high #公有属性 8 9 def setAge(self,age): 10 11 if age>0 and age<75: 12 13 self.__age=age 14 15 def getAge(self): 16 17 return self.__age 18 19 xiaobai=Dog("小白","10") 20 21 xiaobai.setAge(20) 22 23 print(xiaobai.getAge())
2.类中:创建对象时,会自动调用__init__方法,删除对象时,会自动调用 __del__方法
若一个对象有多个变量名字,用del多次删除后,才会调用__del__方法
3.类之间可以继承,这么写:class 子类名(父类)
通过继承来的方法可以访问父类的私有属性
子类自定义的方法不能访问父类的私有属性
4.私有方法:def __方法名(self,参数) 子类继承父类时,子类不能直接调用父类的私有方法
调用私有方法:def __test3(self):
print a
def test4(self):
self.__test3()
5.若子类中的方法名和父类中的方法名重名,子类的对象会优先使用子类的方法(就近原则)
若子类中没有,再寻找父类中的方法,若继承了多个父类,优先使用先继承的那个(即class C(A,B),优先使用A)
若A和B继承了Base,Base中也有同样的方法,还是优先使用先继承的,若A中没有,使用B中的,A和B都没有,才使用Base中的 (多继承)(广度遍历)
6.子类需要使用父类方法,但仍想进行修改,在子类的定义后加上 父类名.方法名(self)/super().方法名 (无需self),在下一行再定义子类的方法
1 class Animal(object): 2 def bark(self): 3 print("aaaaaaa") 4 class Cat(Animal): 5 def bark(self): 6 Animal.bark(self) 7 print("bbbbbbb") 8 miaomiao=Cat() 9 miaomiao.bark()
7.多态:有多个子类,子类和父类中有相同的方法,创建不同的子类对象,调用相同方法,产生结果不一样
8.若对象的初始化属性都一样,可以在类的init方法里直接定义
1 class Animal(object) 2 def __init__(self,name="shi",age="10") 3 self.name=name 4 self.age=age
9.类属性:分为公有属性 私有属性。类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本;放在方法外面的是类属性,放在方法里面的实例属性
不能在类外通过实例对象和类对象访问私有的类属性,如果在类外修改类属性,必须通过类对象去引用然后进行修改。
如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,
并且如果通过实例对象引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性
类方法:是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数
@classmethod
def test(cls):
pass
实例属性:放在方法里面的实例属性,实例属性是实例对象特有的,类对象不能拥有,即不能通过类对象调用,创建了对象后才会调用__init__方法
***类对象可以直接调用类属性,类方法;不能调用实例属性,实例方法
实例对象可以获取类属性和实例属性的值,但是只能修改实例属性,不能修改实例对象;还可以调用类方法和实例方法
实例方法

浙公网安备 33010602011771号