-
多态
在实际调用的时候,会首先查找自身的定义,如果自身有定义,则优先使用自己定义的函数;如果没有定义,则顺着继承链向上找。
多重继承
Python允许从多个父类继承。多重继承和单继承没有特别大的差异,只是在括号内加入多个需要继承的类的名字即可。
查看全部 -
函数isinstance()可以判断一个变量的类型。
在继承链上,一个父类的实例不能是子类类型,因为子类比父类多了一些属性和方法。
在一条继承链上,一个实例可以看成它本身的类型,也可以看成它父类的类型。
查看全部 -
class Student(Person):
def __init__(self, name, gender, score):
super(Student, self).__init__(name, gender)
self.score = score
student = Student('Alice', 'girl', 100)
print(student.name) # ==> Alice
print(student.gender) # ==> girl
print(student.score) # ==> 100class Student()定义的时候,需要在括号内写明继承的类Person;
在__init__()方法,需要调用super(Student, self).__init__(name, gender),来初始化从父类继承过来的属性;
查看全部 -
为了操作实例对象的私有属性,定义了实例方法。
操作类的私有属性,则应该定义类的方法。
class Animal(object):
__localtion = 'Asia'
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def set_localtion(cls, localtion):
cls.__localtion = localtion
@classmethod
def get_localtion(cls):
return cls.__localtion
print(Animal.get_localtion()) # ==> Asia
Animal.set_localtion('Afica')
print(Animal.get_localtion()) # ==> Africa类方法需要使用@classmethod来标记为类方法,否则定义的还是实例方法
类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.__localtion 实际上相当于Animal.__localtion。
因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。
查看全部 -
需要在外部访问私有属性时:
定义实例方法
实例的方法指的就是在类中定义的函数,实例方法的第一个参数永远都是self,self是一个引用,指向调用该方法的实例对象本身,除此以外,其他参数和普通函数是完全一样的。
class Person(object):
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__namep = Person('Alice')
print(p.get_name()) # ==> Alice在外部调用实例方法时,是不需要显式传递self参数的。
可以把和类的实例有关的操作都抽象成实例方法。
查看全部 -
私有属性是以双下划线'__'开头的属性。
不能被外部访问的属性称为私有属性。
查看全部 -
私有属性是以双下划线'__'开头的属性。
不能被外部访问的属性称为私有属性。
在外部访问私有属性将会抛出异常,提示没有这个属性。
虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。私有属性是为了保护类或实例属性不被外部污染而设计的。
查看全部 -
在类属性和实例属性同时存在的情况下,实例属性的优先级是要高于类属性的,在操作实例的时候,优先是操作实例属性。
当实例没有和类同名的时候,通过实例对象,依然可以访问到类属性。
通过实例是无法修改类的属性的,事实上,通过实例方法修改类属性,只是给实例绑定了一个对应的实例属性。
查看全部 -
seek()方法,可以移动文件的游标位置,它接受一个参数,表示文件的位置,0:文件首部,1:当前位置,2:文件尾部,通过seek()可以把文件游标移动到文件首部但不删除文件的内容。
f =
open('test.txt', 'a+') content = f.readlines
()
print(content) # ==> []
f.seek(0)
content = f.readlines()
print(content) # ==> ['Hello World\n', 'Hello Python\n', 'Hello Imooc\n']查看全部 -
class Animal(object):
count = 0
def __init__(self, name, age):
self.name = name
self.age = age
Animal.count += 1
dog = Animal('wangwang', 1)
print(Animal.count)
cat = Animal('mimi', 3)
print(Animal.count)
pig = Animal('panpan', 1)
print(Animal.count)
查看全部 -
类属性
class Animal(object):
location = 'Asia'
def __init__(self, name, age):
self.name = name
self.age = age
location就是属于Animal这个类的类属性。通过Animal()实例化的所有对象,都可以访问到location,并且得到唯一的结果。
dog = Animal('wangwang', 1)
cat = Animal('mimi', 3)
print(dog.location) # ==> Asia
print(cat.location) # ==> Asia
# 类属性,也可以通过类名直接访问
print(Animal.location) # ==> Asia类属性也是可以动态添加和修改的,需要注意的是,因为类属性只有一份,所以改变了,所有实例可以访问到的类属性都会变更:
Animal.location = 'Africa'
print(cat.location) # ==>Africa
print(dog.location) # ==>Africa
查看全部 -
class Person(object):
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age__init__() 方法的第一个参数必须是 self,后续参数则可以自由指定,和定义函数没有任何区别。
定义类后,就可以相应的实例化对象了,需要注意的是,在实例化的时候,需要提供除self以外的所有参数。
查看全部 -
赋予实例这些属性
xiaohong.name = 'xiaohong'
xiaohong.sex = 'girl'
xiaohong.age = 13
print(xiaohong.name)
print(xiaohong.sex)
print(xiaohong.age)这些属性也可以和普通变量一样进行运算
比如xiaohong长大了一岁:xiaohong.age = xiaohong.age + 1
查看全部 -
在Python中,通过class关键字定义一个类,按照 Python 的编程习惯,类名以大写字母开头。
class Person: pass
class Person(): pass
class Person(object): pass定义了类之后,就可以对类进行实例化了,实例化是指,把抽象的类,赋予实物的过程。创建实例使用类名+()。
class Person(object): pass
xiaohong = Person()
xiaoming = Person()
查看全部
举报