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=birthxiaoming = 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+=1print (Person.how_many())#本来私有属性是不允许外部访问的,但可以通过类方法访问p1 = Person(‘Bob‘)print (Person.how_many())

python-面向对象编程

评论关闭