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

88 阅读3分钟
------------------类属性和实例属性关系-------------------

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)

更多免费技术资料可关注:annalin1203