Python的类

像C++一样,class语句是Python的主要面向对象编程工具,与C++不同的是,Python的class不仅是一个说明,像def一样,class是一个对象建造者,是一个隐含的赋值(运行时它产生了一个类对象,并用列在首部的类名字来引用这个对象)。

 
 
  1. 类的定义
  1. 通过继承来定制类
  1. 类可以重载Python的操作符

类的定义:

class FirstClass():
    def setdata(self, value):
	    self.data = value
    def display(self):
	    print(self.data)

类定义的格式如上所示,类中包含方法的定义。Python语言,一定要对齐,注意格式的规范。类的实例如下:

x = FirstClass()
y = FirstClass()
x.setdata("king")
x.display();
y.setdata(90);
y.display();

king
90

通过继承来定制类

类继承的思想是:

  • 超类列在类首部的括号里;

被继承的类为超类(superclass)。

  •  类从超类继承属性;
  •  实例从所有相关类中继承;

当查找一个名字时,Python先在实例中找,然后是它的类,最后是超类。

  •   通过子类改变逻辑,而不是直接改变超类;

通过在子类里覆盖超类里的名字,子类就覆盖了继承的行为。

class SecondClass(FirstClass):
    def display(self):
	    print('current value = "%s"' %self.data)
z = SecondClass();
z.setdata(43)
z.display();
current value = "43"

类可以重载Python的操作符:

  • _ _X_ _的名字的方法是特殊的挂钩(hook);

Python通过特殊命名的方法拦截操作符,以实现操作符重载。

  • Python在计算操作符时会自动调用这样的方法;
  • 类可以冲定义大多数内置的操作符;
  • 操作符重载似的类与Python的对象模型紧密集成;
class ThirdClass(SecondClass):
    def __init__(self,value):
	    self.data = value
    def __add__(self,other):
	    return ThirdClass(self.data + other)
    def __mul__(self, other):
	    self.data = self.data * other
		
a = ThirdClass("abc")
a.display()
b = a + 'xyz'
b.display()
a*3
a.display()
current value = "abc"
current value = "abcxyz"
current value = "abcabcabc"

Python和面向对象编程:

继承:在Python里是基于属性查找;

多态:对于X.method来说,method方法的含义依赖于X的类型;

封装:方法和操作符实现了行为,而数据隐藏是一种约定;

 

 

名字空间规则总结

限定型名字(object.x)和非限定型名字是不同的:

非限定型名字与作用域有关;

限定型名字使用对象object的名字空间;

(在模块与类的)作用域内初始化对象的名字空间;

 

名字空间字典:

面向对象编程和授权:

授权指的是内嵌有其他对象的控制对象,它们向内嵌对象传递响应操作请求,控制对象负责跟踪访问这样的事物。Python里授权经常是用 __gerattr__方法来实现,因为它拦截了对不存在属性的访问,一个包裹类可以用__gerattr__把请求转向被包裹的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值