主动调用其他类的成员, 特殊成员

一. 主动调用其他类的成员

class Base(object):
    def f1(self):
        print(‘5个功能‘)
obj = Base()
Base.f1(obj)
obj.f1()

  

方式一

class Base(object):

    def f1(self):
        print(‘5个功能‘)

class Foo(object):

    def f1(self):
        print(‘3个功能‘)
        Base.f1(self)

obj = Foo()
obj.f1()

  

方式二:按照类的继承顺序,找下一个.

class Base(object):
    def f1(self):
        print(‘5个功能‘)

class Foo(Base):
    def f1(self):
        super().f1()
        print(‘3个功能‘)

obj = Foo()
obj.f1()

  

方式二:按照类的继承顺序,找下一个.

class Foo(object):
    def f1(self):
        super().f1()
        print(‘3个功能‘)

class Bar(object):
    def f1(self):
        print(‘6个功能‘)

class Info(Foo,Bar):
    pass

# obj = Foo()
# obj.f1()      # Foo中没有继承Bar, super()会报错

obj = Info()
obj.f1()

  

二. 特殊成员

class Foo(object):

    def __init__(self,a1,a2):
        self.a1 = a1
        self.a2 = a2

    def __call__(self, *args, **kwargs):
        print(11111,args,kwargs)
        return 123

    def __getitem__(self, item):
        print(item)
        return 8

    def __setitem__(self, key, value):
        print(key,value,111111111)

    def __delitem__(self, key):
        print(key)

    def __add__(self, other):
        return self.a1 + other.a2

    def __enter__(self):
        print(‘1111‘)
        return 999

    def __exit__(self, exc_type, exc_val, exc_tb):
        print(‘22222‘)

1. 类名() 自动执行 __init__
obj = Foo(1,2)

2. 对象() 自动执行 __call__
ret = obj(6,4,2,k1=456)

3. 对象[‘xx‘]  自动执行 __getitem__
ret = obj[‘yu‘]
print(ret)

4. 对象[‘xx‘] = 11  自动执行 __setitem__
obj[‘k1‘] = 123

5. del 对象[xx]     自动执行 __delitem__
del obj[‘uuu‘]

6. 对象+对象         自动执行 __add__
obj1 = Foo(1,2)
obj2 = Foo(88,99)
ret = obj2 + obj1
print(ret)

7. with 对象        自动执行 __enter__ / __exit__
obj = Foo(1,2)
with obj as f:
    print(f)
    print(‘内部代码‘)

8. 真正的构造方法
class Foo(object):
    def __init__(self, a1, a2):     # 初始化方法
        """
        为空对象进行数据初始化
        :param a1:
        :param a2:
        """
        self.a1 = a1
        self.a2 = a2

    def __new__(cls, *args, **kwargs): # 构造方法
        """
        创建一个空对象
        :param args:
        :param kwargs:
        :return:
        """
        return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.).

obj1 = Foo(1,2)
print(obj1)

obj2 = Foo(11,12)
print(obj2)

  

原文地址:https://www.cnblogs.com/NachoLau/p/9572002.html

时间: 2024-11-06 09:51:15

主动调用其他类的成员, 特殊成员的相关文章

面向对象之组合的补充,主动调用其他类的成员,特殊成员

一丶组合的补充 1.类或对象是否能做字典的key? class Foo: pass user_info = { Foo:1, Foo():5 } print(user_info) #{<class '__main__.Foo'>: 1, <__main__.Foo object at 0x000002CF8B1A9CF8>: 5} 2.对象中到底有什么呢? class Foo(object): def __init__(self,age): self.age = age def d

类和对象:成员属性、成员方法 — 学习笔记3

类成员  类成员的访问控制PHP5中对类成员属性或成员方法的访问控制,是通过在其前面添加关键字 public(公有).protected(保护)或 private(私有)来实现的,如果没有设置这些关键字,则该成员方法被默认设置为 public. 类的访问控制权限具体应用规则如下:·由 public 所定义的类成员可以在任何地方被访问.·由 protected 所定义的类成员可以被其他所在类的子类和父类访问.·由 private 所定义的类成员只能被其所在类访问. 成员属性 在类中定义的变量称为成

面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】

  本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ 本文版权归作者和博客园共有,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 ,否则保留追究法律责任的权利. 面向对象概念 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 •强调的是功能行为 面向对象 •将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向过程   在一个结构体中定义窗口的大小

iOS 在类实现定义中声明成员变量的怪异方式

WebGL 规范(WebGL Specification) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的漂亮人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 看看下面的使用方法,几年前系统地看过 Objective-C 2.0 的官方文档和那本

C++的类、对象与成员

C++的类.对象与成员 1.声明一个类 类是用户自定义的类型,如果程序中要用到类,必须先声明定义. 类声明的语法形式如下: class 类名称       {       public:                   公有成员(外部接口)       protected:                   保护型成员       private:                   私有成员       } Class为关键字, 声明一个类时要用到它 . 当然,这里的public.pro

类 this指针 const成员函数

C++ Primer 第07章 类 7.1.2 ?Sales_data类的定义如下: #ifndef SALES_DATA_H #define SALES_DATA_H #include <string> #include <iostream> class Sales_data { public: std::string isbn() const {return bookNo;} Sales_data& combine(const Sales_data&); dou

类 this指针 const成员函数 std::string isbn() const {return bookNo;}

转载:http://www.cnblogs.com/little-sjq/p/9fed5450f45316cf35f4b1c17f2f6361.html C++ Primer 第07章 类 7.1.2 ?Sales_data类的定义如下: #ifndef SALES_DATA_H #define SALES_DATA_H #include <string> #include <iostream> class Sales_data { public: std::string isbn

使用类作用域操作符进行成员函数调用问题

#include "stdafx.h" #include <iostream> using namespace std; class base { public: int func() { return 100; } private: }; class derived:public base { public: int func() { int tem; tem=base::func(); //这样做是可以的, 显式调用基类中的方法(不然无限递归调用) cout<&l

基类与派生类的指针和成员函数调用原理

基类与派生类的指针和成员函数调用原理 1.如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩) 2.如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰.(一般不会这么去定义) 3.如果基础类和衍生类定义了相同名称的成员函数(非虚函数),那么通过对象指针调用成员函数时,到底调用哪个函数要根据指针的类型(基类指针or派生类指针)来确定,而不是