首页 > 代码库 > 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-面向对象编程