python学习总结(面向对象进阶)

-------------------类属性和实例属性关系-------------------
1、类属性和实例属性关系
1、实例属性
实例对象独有的属性
2、类属性
类名访问类属性
3、实例中无同名属性时,可访问到类属性,当定义同名实例属性时,则无法访问
4、常用的查找指令
1、vars :查看实例内属性
2、dir :显示类属性和所有实例属性
3、type :显示类型

-------------------方法-------------------
1、实例方法
隐含的参数为类实例self

2、类方法
隐含的参数为类本身cls

3、静态方法
为隐含参数,主要为了类实例也可以直接调用静态方法

4、类名可以调用类方法和静态方法,但不可以调用实例方法

5、实例:
 class Test(object):
def instancefun(self):
print("InstanceFun")
print(self)

@classmethod
def classfun(cls):
    print("ClassFun")
    print(cls)

@staticmethod
def staticfun():
    print("StaticFun")

-------------------私有化-------------------
1、xx :公有变量

2、_x :单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问

3、__xx :双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)

4、xx :双前后下划线,用户名字空间的魔法对象或属性。例如:init , __ 不要自己发明这样的名字

5、xx__ :单后置下划线,用于避免与Python关键词的冲突

6、示例:
#人类
class Person(object):
def init(self,name,age,state):
self.name = name
self._age = age
self.__state = state

    def personshow(self):
        print self.name
        print self._age
        print self.__state

    def _work(self):
        print('in work')

    def __away(self):
        print('in away')

#学生类继承人
class Student(Person):
    def setInfo(self,name,age,state):
        self.name = name
        self._age = age
        self.__state = state

    def studentshow(self):
        print self.name
        print self._age
        print self.__state

#main入口
if __name__ == '__main__':
    #创建一个人类的对象
    person = Person('xiaohao', 18, 'football')

    person.personshow()

    #创建一个学生对象
    student = Student('xiaohao', 18, 'football')

    student.setInfo('xiaowang',25,'basketball')

    student.studentshow()

    student.personshow()

    person._work()

    person._Person__away()

-------------------分析一个类-------------------
1、init
1、说明 :构造初始化函数
2、触发条件 :创建实例后,赋值时使用,在new后

2、new
1、说明 :生成实例所需属性
2、触发条件 :创建实例时

3、class
1、说明 :实例所在的类
2、触发条件 :实例class

4、str
1、说明 :实例字符串表示,可读性
2、触发条件 :print(类实例),如没实现,使用repr结果

5、repr
1、说明 :实例字符串表示,准确性
2、触发条件 :类实例 回车 或者 print(repr(类实例))

6、del
1、说明 :析构
2、触发条件 :del删除实例

7、dict
1、说明 :实例自定义属性
2、触发条件 :vars(实例 dict)

8、doc
1、说明 :类文档,子类不继承
2、触发条件 :help(类或实例)

9、getattribute
1、说明 :属性访问拦截器
2、触发条件 :访问实例属性时,优先级高于dict访问
3、实例 :
#coding=utf-8
class Itcast(object):
def init(self,subject1):
self.subject1 = subject1
self.subject2 = 'cpp'

            #属性访问时拦截器,打log
            def __getattribute__(self,obj):
                if obj == 'subject1':
                    print('log subject1')
                    return 'redirect python'
                else:   #测试时注释掉这2行,将找不到subject2
                    return object.__getattribute__(self,obj)

            def show(self):
                print 'this is Itcast'

    s = Itcast('python')
    print s.subject1
    print s.subject2

10、bases
1、说明 :类的所有父类构成元素
2、触发条件 :

-------------------属性保护-------------------
1、实例:
#coding=utf-8

class Man(object):
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        if not isinstance(age, int):
            raise ValueError('age should be int')
        if age < 0 or age > 150:
            raise ValueError('age should be 0-150')
        self._age = age

m = Man('jack', 32)
print(m.name)
print(m.age)
m.age = 40
print(m.age)
m.name = 'rose' #此处报错

-------------------面向对象设计-------------------
1、封装:

2、继承:class Cat(Animle) class Animle(object)
1、重写
class Cat(Animle):
def chi(self):
重写
Animal.chi(self)

3、多态:
1、虚方法
2、抽象方法
3、接口
4、示例:
class Dog(Animal):
def chi(self):
print 'chi'
def test(animal):
animal.chi()
dog = Dog()
test(dog)

转载于:https://blog.51cto.com/13587708/2145843

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值