python比较之面向对象
2021-05-14 22:24
                         标签:构造   因此   就是   优先   static   err   模拟   结构   elf    python是面向对象语言,因此它具有面向对象封装、继承、多态等特点。 简单了解下面向对象术语 类:具有相同属性和方法的对象的集合,对象是实例化后的类。 方法:类中定义的函数,使用def定义,同时参数里面默认要带上self 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 局部变量:定义在方法中的变量,只作用于当前实例的类。 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。 实例化:创建一个类的实例,类的具体对象。 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。  python中定义类格式如下: class ClassName():   def 方法名(self):     pass 类名一般建议使用驼峰命名方式,即:每个单词首字母大写。 python继承,允许同时继承多个父类,在调用方法时,先寻找子类如果没有则寻找父类从左到右,再从下到上找 __init__ : 构造函数,在生成对象时调用 __del__ : 析构函数,释放对象时使用 __call__: 函数调用,对象后面(),触发调用  __str__:改变对象的字符串显示 __doc__:类的描述信息 在类中方法有普通方法、静态方法、特性方法、类方法等 python比较之面向对象 标签:构造   因此   就是   优先   static   err   模拟   结构   elf    原文地址:https://www.cnblogs.com/heertong/p/12194494.html 1 class Person(object):
 2     name1 = ‘admin‘   #name1类变量
 3     __age = ‘18‘   #私有变量,以__开头,私有属性在类外部无法直接进行访问
 4     def __init__(self,age,sex):  #age sex为实例变量
 5         self.name = self.name1
 6         self.age = age
 7         self.sex = sex
 8 
 9     def info(self):
10         print(‘你的名字是{0},年龄{1}岁,性别是{2}‘.format(self.name,self.age,self.sex))
11 
12 if __name__ == ‘__main__‘:
13     p = Person(‘20‘,‘男‘)
14     p.info()
 1 class Person():
 2     def __init__(self,name):
 3         self.name = name
 4 
 5     def show(self):
 6         print(‘你的名字是{0}‘.format(self.name))
 7 
 8     def aa(self):
 9         print(‘我是父类Person‘)
10 
11 class PA():
12     def __init__(self,name):
13         self.name = name
14 
15     def show(self):
16         print(‘PA:你的名字是{0}‘.format(self.name))
17 
18     def aa(self):
19         print(‘我是父类PA‘)
20 
21     def bb(self):
22         print(‘我是类PA中的bb方法‘)
23 
24 class PsersonA(Person):
25     def __init__(self,name,age):
26         Person.__init__(self,name)
27         self.age = age
28     #
29     # def show(self):
30     #     print(‘你的名字是{0},年龄{1}岁‘.format(self.name, self.age))
31 
32 class PsersonB(PA):
33     def __init__(self,name,sex):
34         super(PsersonB,self).__init__(name)
35         self.sex = sex
36 
37     def show(self):
38         print(‘你的名字是{0},性别是{1}‘.format(self.name, self.sex))
39 
40     def info(self):
41         print(‘我是类PsersonB‘)
42 
43 class C(PsersonA,PsersonB):
44     def __init__(self,name,age,sex):
45         PsersonA.__init__(self,name,age)
46         PsersonB.__init__(self, name, sex)
47 
48     def info(self):
49         print(‘我是子类C‘)
50 
51 
52 if __name__ == ‘__main__‘:
53     p = C(‘ADMIN‘,‘20‘,‘男‘)
54     p.info()  #子类与父类存在相同方法,优先使用子类
55     p.show()   #子类方法不存在,则从父类中寻找,顺序 从左到右,从下到上,就先寻找第一个父类,如果没有继续找第一个父类的父类,如果还没有找第二个父类
56     p.aa()   #方法aa,C类中没有,找第一个父类 PsersonA 中也没有,找 PsersonA 的父类 Person 有方法aa
57     p.bb()
类的专有方法:
 1 class P():
 2     ‘‘‘类描述信息嘀嗒‘‘‘
 3     def __init__(self):
 4         print(‘我是构造函数,在生成对象时时执行‘)
 5 
 6     def __del__(self):
 7         print(‘我是虚构函数,最后执行‘)
 8 
 9     def info(self):
10         print(‘个人信息‘)
11 
12     def __call__(self, *args, **kwargs):
13         print(‘对象后面(),触发调用‘)
14         self.info()
15 
16     def __str__(self):
17         return ‘改变对象字符串显示‘
18 
19 if __name__ == ‘__main__‘:
20     obj = P()
21     print(obj())
22     print(obj.__doc__)
23     print(obj)
24         
 1 class P(object):    
 2     def info(self):
 3         print(‘我是普通方法‘)  
 4     
 5     @property   #加property装饰器,为特性方法,在调用函数时无需加()
 6     def info1(self): 
 7         print(‘我是特性方法‘)
 8     
 9     @staticmethod  #加staticmethod装饰器,为静态方法,可由类名直接调用
10     def info2():
11         print(‘我是静态方法‘)
12     
13     @classmethod    #加classmethod装饰器,为静态方法,属于类,可由类直接调用
14     def info3(cls):
15         print(‘我是类方法‘)
16  
17         
18 if __name__ == ‘__main__‘:
19     obj = P()
20     obj.info()
21     obj.info1
22     P.info2()
23     P.info3()
24         
上一篇:修改fat-jar名称
下一篇:python格式化输出