类与对象
-class Person():
-p=Person()
属性查找
-p.name:先找对象自己,找不到去类中找,再找不到报错
类属性和对象属性
-分别再不同的名称空间
对象的绑定方法
-特殊之处,对象来调用,会自动传值,把对象自己传过来,当那个对象来调用,self就是谁
-类也可以来调用,类调用就是普通函数,有几个参数就要传几个参数
函数和方法
-
类与数据类型(类即类型)
-
类的继承(python支持多继承)
继承后属性查找顺序
派生(子类中新定义的属性或方法)
super()特殊的对象
多继承下的super(FatBossGril.__mro__)
组合(属性的值是指向另外一个类的对象)
多态与多态性
-多态指的是一类事物有多种形态
-多态性:一种调用方式,不同的执行效果
封装,隐藏属性
property
类方法,对象方法,静态方法
isinstance和issubclass
isinstance与type
反射getattr,setattr,hasattr,delattr
__setattr__和__delattr__和__getattr__
-添加/修改属性会触发它的执行
-删除属性的时候会触发
-只有在使用点调用属性且属性不存在的时候才会触发
-递归现象:object.__setattr__(self,'storage',{
})(没讲)
__setitem__和__getitem和__delitem__(没讲)
__init__和__new__(不讲了)
其他魔法方法(不讲了)
元类(不讲了)
-type:所有类的类,但是继承object
-object:所有类的父类,同时由type生成
一切皆对象之函数对象
class Person:
name = 'lqz'
p = Person()
p.name = 'egon'
print(p.name)
p1 = Person()
p1.name = 'tank'
print(p1.name)
Person.name = 'xxx'
class Person:
name = 'lqz'
def play(self):
print('2绑定方法')
p = Person()
p.play()
Person.play([1, 2])
from types import FunctionType, MethodType
class Person:
name = 'lqz'
def play(self):
print(self.name)
print('3.1', isinstance(Person.play, FunctionType))
print('3.2', isinstance(Person.play, MethodType))
p = Person()
print('3.3', isinstance(p.play, FunctionType))
print('3.4', isinstance(p.play, MethodType))
l = [1, 2, 3]
dic = {
'name': 'egon', 'age': 12}
p = Person
print(type(p))
print(type(l))
class Human:
name = 'lqz'
def test(self):
print('test')
class People(Human):
name = 'egon'
class Human:
name = 'lqz'
def test(self):
print('test')
class Animal():
def test2(self):
print('test2')
class People(Human):
name = 'egon'
def test(self):
super().test()
super().test2()
class Human:
name = 'qgz'
def __init__(self, name):
self.name = name
class Animal:
pass
h = Human('oko')
print(h.name)
h1 = Human(Animal())
print(h1)
class Human:
def test(self):
print('Human play')
class Animal:
def test(self):
print('Animal play')
def print_test(obj):
obj.test()
h = Human()
a = Animal()
print_test(h)
print_test(a)
class Human:
def __init__(self, name):
self.name = name
@classmethod
def clamet(cls):
pass
class Animal():
pass
class Human(Animal):
pass
class Person():
def __setattr__(self, key, value):
print('setattr')
def __getattr__(self, item):
print('getattr')
return 1
def test():
print('xx')
test.name = 'qqz'
test()
print(test.name)