python类和对象-扩展

1、为类或对象动态创建属性或方法

2、__slots__ = (‘name‘,‘age‘),【实例】只能创建指定的属性属性或方法 ---新式类

3、执行父类的构造函数的不同
Father.__init__(self) --经典类
super(Son,self).__init__() --新式类

4、Person.__bases__ 只会显示一层继承的所有父类
5、__call__
  __call__ 一个已经实例化的对象p,在调用p()
6、python中一切都是对象,类本身也是对象,类是由type产生的。

class Foo
  pass
Bar = type(‘Bar‘,(object,),{‘name‘:123,‘Func‘:Hello})

以上等同于

class Bar:
    name = ‘yangmv‘
    def func(self):
        print ‘go func‘
obj = Bar().func()

既然这样,那么对于定义的类来说,只要定义了一个类,就调用一次 type类的构造函数,如何验证?

7、__metaclass__  可以指定类是由那个type来产生的

class MetaClass(type):
    def __init__(self,name,bases,dicts):
        print name

class C1:
    __metaclass__ = MetaClass

class C2:
    __metaclass__ = MetaClass

8、__init__ __new__ __call__
我们知道执行 f = Foo() 会默认执行构造函数 __init__
实际上执行了:type(‘Foo‘,bases,dicts).__call__(‘Foo‘)

class MetaClass(type):

    def __init__(self,name,bases,dicts):
        print name
    def __call__(self, *args, **kwargs):
        print self
        result = self.__new__(self, *args, **kwargs)
        print result
        type(result).__init__(result,*args,**kwargs)
        return result

class C1:
    __metaclass__ = MetaClass

    def __init__(self):
        print ‘c1.__init__‘
        self.name = ‘yangmv‘

    def __new__(cls, *args, **kwargs):
        print cls
        print args
        print kwargs
        return object.__new__(cls, *args, **kwargs)

    def Hello(self):
        print ‘hello‘
class C2:
    __metaclass__ = MetaClass

#c = C1()
c1 = object.__new__(C1)
c1.Hello()

时间: 2024-10-13 09:05:34

python类和对象-扩展的相关文章

python 类和对象的属性

python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性,父类和子类的类属性都会被改变. 3. 子类继承父类的类属性可以通过类名+属性名使用,但是一旦发生赋值,就会新定义一个相同名字的子类自己的类属性. 4. 类的对象可以通过对象名+属性名使用类属性,但是一旦发生赋值,就会新定义一个相同名字的对象属性,而且不会被继承. eg: >>> class

python类与对象各个魔法方法总结

1.python类与对象各个魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常.因此,现在我们要求定义一个 Nstr 类,支持字符串的相减操作:A – B,从 A 中去除所有 B 的子字符串. class Nstr(str): def __sub__(self,other):  self=list(self)         other=list(other) for i in ot

python类与对象的组合与继承

1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承用于"是一个"的场景中.例如,水池里有一个乌龟,天上有一个鸟,地上有一个小甲鱼,这些适合使用组合.青瓜是瓜,女人是人,鲨鱼是鱼,这些就应该使用继承啦实例如下: class Turtle: def __init__(self,x): self.num = x class Fish: def

python类与对象基本语法

本文和大家分享的主要是python中类与对象相关内容,一起来看看吧,希望对大家学习python有所帮助. 面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象. 定义一个类 class person: age=10 #下面sex没有进行初始化是会报错的 #sex name="intsmaze" def getPe

Python 类与其对象的创建和应用

1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性 >>> class Athlete: def __init__(self,a_name,a_dob=None,a_times=[]): self.name=a_name self.dob=a_dob self.times=a_times >>> sarah=Athlete('Sarah Sweeney','2002-07-02',['2:58','2.34','1

Python 类和对象-上

#类和对象 class Human: #属性 -> 成员属性(变量) ear = 2 mouth = 1 sex = 'man' age = 28 name = 'zhangwang' married = False color = 'yellow' #特征 -> 成员方法(函数) def walk(self): print('直立行走') def eat(self): print('吃饭') def sleep(self): print('睡觉') def playgame(self): p

python类和对象理解

类的概念 类(class)抽象的概念,比如说人类.鸟类.水果.是一个总的称呼,没有具体到某个物体: 对象(object,指具体实例,instance): 类定义的语法: class 类名: 执行语句 类变量 类方法 类最重要的两部分就是类变量和类方法,类成员之间的可以相互调用. 程序可以在类中给新变量赋值就是增加类变量,可以通过del语句删除已有类的变量. 在__init__构造函数(构造函数后面会说到)里面的是实例变量,程序可以任何位置(类里面或者类外面)增加实例变量,删除则用del语句. 在

第13课 python 类与对象1

今日我们开始 学习类 & 对象.....(上个课时,我们只是说了debug,这种技能,只能说概念,真正debug,还是要自己动手) 学习很多对象语言,我自己都很模糊,什么事对象编程语言.....但是学python后,就清晰了... 类 对象 类:我们从人类,男 女 去区分. ####说明类 是一个 分类,有男人,女人相同的特征,共同的属性..所以 我们叫做类: ####在python 中 分 字符,整数,浮点类,这些类,其实说白了是一种概念化的内容.类下面是对象(具体的每个) ####还是不可以

Python类和对象

在设计之初,Python 就被设计成支持面向对象的编程语言,因此 Python 完全能以面向对象的方式编程.而且 Python 的面向对象比较简单,它不像其他面向对象语言提供了大量繁杂的面向对象特征,它致力于提供简单.够用的语法功能. 正因为如此,在 Python 中创建一个类和对象都很容易.Python 支持面向对象的三大特征:封装.继承和多态,子类继承父类同样可以继承到父类的变量和方法. 面向对象相关术语 在系统学习面向对象编程之前,初学者要了解有关面向对象的一些术语.当和其他人讨论代码的时