首页 > 代码库 > python-面向对象编程
python-面向对象编程
包:文件夹,可以有多级
模块:py文件
在python中,为避免不同模块重名,可以将同名模块放入不同包中。
1.如何区分包和普通目录:
在每个包里都必须有一个__init__.py的文件,即便是空文件
2.旧版本中新版本代码的使用:
from __future__ import xxx
实例属性
由于Python是动态语言,对每一个实例,都可以直接给他们的属性赋值,实例的属性可以像普通变量一样进行操作
1.初始化实例属性
__init__(self,xxx,…)
class Person(object): def __init__(self,name,gender,birth): #初始化实例属性 self.name=name self.gender=gender self.birth=birth xiaoming = Person(‘Xiao Ming‘, ‘Male‘, ‘1990-1-1‘, job=‘Student‘) print (xiaoming.name) print (xiaoming.job)
2.任意关键字参数
接受任意关键字参数:**kw
初始化:self.__dict__.update(kw)
3.访问限制
如果一个属性由双下划线开头,该属性就无法被外部访问
4.实例方法
即类中定义的函数,第一个参数为self。
实例方法其实也是属性,它实际上是一个函数对象。比如说p1.get_grade 返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p1.get_grade() 才是方法调用。
在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。
# -*- coding:utf-8 -*- class Person(object): def __init__(self, name, score): self.name=name self.__score=score def get_grade(self): #实例方法,即函数 if self.__score>=90: return ‘A-优秀‘ elif self.__score>=60: return ‘B-及格‘ else: return ‘C-不及格‘ p1 = Person(‘Bob‘, 90) print (p1.get_grade)#返回函数对象 print (p1.get_grade())#方法调用
类属性
如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个
1.类属性和实例属性名字冲突
当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。
2.类方法
通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。
因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。
class Person(object): __count = 0 @classmethod #将方法绑定到类上 def how_many(cls): return cls.__count #类方法的第一个参数将传入类本身,通常将参数名命名为 cls,上面的 cls.__count 实际上相当于 Person.__count。 def __init__(self,name): self.name=name Person.__count+=1 print (Person.how_many()) #本来私有属性是不允许外部访问的,但可以通过类方法访问 p1 = Person(‘Bob‘) print (Person.how_many())
python-面向对象编程