首页 > 编程语言 > 详细

Python 类

时间:2019-11-22 01:09:32      阅读:102      评论:0      收藏:0      [点我收藏+]

1.创建类

1 class Person:
2      def setName(self.name):
3           self.name = name
4      
5      def getName(self):
6           return self.name
7      
8      def greet(self):
9           print("Hello, world! I‘m %s." % self.name)

这里创建了Person类,并在类中定义了三个方法:setName(),getName(),greet()

 在调用Person对象foo的setName()和greet()函数时,foo自动将自己作为第一个参数传入函数中,因此形象地命名为self

通过self,成员方法得以访问他们要对其特性进行操作的对象本身

2.特性、函数和方法

 self参数正是方法和函数的区别,方法(绑定方法)将它们的第一个参数绑定到所属的实例上,因此这个参数可以不必提供,如果将特性绑定到一个普通函数上,这样就不会有特殊的self参数了

 技术分享图片

self参数并不取决于调用方法的方式

 技术分享图片

 最后一个方法的调用中,变量birdsong引用绑定方法bird.sing上,这还是对self参数的访问,也就是说,它仍旧绑定到类的相同实例上

私有化
默认情况下,程序可以从外部访问一个对象的特性。但是应该尽量避免从外部直接访问特性,可以使用私有特性,这是外部对象无法访问,但通过访问器能够访问的特性

为了让方法或者特性变为私有,只要在它的名字前面加上双下划线即可:

1 class Secretive:
2     def __inaccessible(self):
3         print("Bet you can‘t see me..."
4 
5     def accessible(self):
6         print("The secret message is:")
7         self.__inaccessible()

事实上,类的内部定义中,所有以双下划线开始的名字都被“翻译”成前面加上单下划线和类名的形式,因此实际上还能能在类外访问这些私有方法

3.类的命名空间

类的定义就是执行代码块

定义类时,所有位于class语句中的代码都在特殊的命名空间中执行——类命名空间。这个命名空间可由类内所有成员访问

技术分享图片

技术分享图片

 技术分享图片

 

 4.指定超类

子类可以扩展超类的定义,将其他类名写在class语句后的圆括号内可以指定超类

1 class Filter:
2      def init(self):
3           self.blocked = []
4      def filter(self, sequence):
5           return [x for x in sequence if x not in self.blocked]
6 
7 class SPAMFilter(Filter):
8      def init(self):
9           self.blocked = [SPAM]

FIlter是一个用于过滤序列的通用类,事实上它不能过滤任何东西

技术分享图片

 

 Filter类的用处在于它可以用作其他类的基类(超类),比如SPAMFilter类,可以将序列中的“SPAM”过滤出去

技术分享图片

 

 SPAMFilter类中重写了基类Filter中的init()方法,继承了filter()方法

这里展现了继承的用处:可以写一大堆不同的过滤类,全部从Filter类继承,每一个都可以使用已经实现的filter()方法

5.调查继承

查看一个类是否是另一个的子类,可以用内建的issubclass()函数:

技术分享图片

 

 想知道已知类的基类,可以使用他的特殊特性__bases__

技术分享图片

 

 可以使用isinstance()方法检查一个对象是否为另一个类的实例

技术分享图片

 

 可以看出s是SPAMFilter类的成员,也是Filter类的成员,因为SPAMFilter类是Filter的子类

isinstance()对于类型也起作用,比如字符串类型(str)

如果只想知道一个对象属于哪个类,可以使用__class__特性

技术分享图片

 6.多重继承

 1 class Calculator:
 2     def calculate(self, expression):
 3         self.value = eval(expression)
 4 
 5 class Talker:
 6     def talk(self):
 7         print("Hello, my name is " + int(self.value))
 8 
 9 class TalkingCalculator(Calculator, Talker):
10     pass

子类(TalkingCalculator)自己不做任何事情,只是从自己的超类继承所有行为

技术分享图片

 这种行为称为多重继承

当使用多重继承的时候,应当注意:如果一个方法从多个超类继承,那么先继承的类(写在后面)中的方法会重写后继承的类(写在前面)中的方法

Python 类

原文:https://www.cnblogs.com/albert0504/p/11675114.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!