面向对象 二

Posted Twotigers

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象 二相关的知识,希望对你有一定的参考价值。

面向对象:

 

类中的成员:

In [1]: class A:

...: name=10

...:

 

In [2]: A.name

Out[2]: 10

 

In [3]: import inspect

 

In [4]: inspect.getmembers(A)

变量(字段),方法(函数):

        静态字段

字段

        普通字段

 

        普通方法

方法 静态方法

        类方法

 

一.字段eg:

  1. class Student:  
  2.     grade =1  
  3.     
  4.     def __init__(self,name,age ) :  
  5.         self.name=name  
  6.         self.age=age  
  7.     def show(self):  
  8.         print(self.name,self.age,self.grade)  
  9. print(Student.grade)  
  10. # print(Student.age)   这个会报错
  11. tom = Student("tom",10)  
  12. tom.show()  

 

 

 

 

 

 

在内存中存储的方式:

In [8]: Student.__dict__

Out[8]:

mappingproxy({\'__dict__\': <attribute \'__dict__\' of \'Student\' objects>,

\'__doc__\': None,

\'__init__\': <function __main__.Student.__init__>,

\'__module__\': \'__main__\',

\'__weakref__\': <attribute \'__weakref__\' of \'Student\' objects>,

\'grade\': 1,

\'show\': <function __main__.Student.show>})

In [10]: tom.__dict__

Out[10]: {\'age\': 10, \'name\': \'tom\'}

图片出自: http://www.cnblogs.com/wupeiqi/p/4766801.html

静态字段的使用:通过修改静态字段,达到统一修改

In [22]: Lili = Student("Lili",9)

In [23]: Lili.grade

Out[23]: 5

In [24]: tom.grade

Out[24]: 5

In [25]: Student.grade=8

In [26]: tom.grade

Out[26]: 8

In [27]: Lili.grade

Out[27]: 8

 

 

二.方法

1. 普通方法:

普通方法由.obj.function()调用:

eg:

2.静态方法

  1. class Student:  
  2.     grade = 1  
  3.     
  4.     def __init__(self, name, age):  
  5.         self.name = name  
  6.         self.age = age  
  7.     
  8.     def show(self):  
  9.         print(self.name, self.age, self.grade)  
  10.    
  11.     @staticmethod  
  12.     def static():  
  13.         print("静态方法")  
  14.     
  15. Student.static()  
  16. tom = Student("tom", 10)  
  17. tom.static()  

静态方法

静态方法 静态方法可以由classname.func()或obj.func()调用

3.类方法

  1. class Student:  
  2.     grade = 1  
  3.     
  4.     def __init__(self, name, age):  
  5.         self.name = name  
  6.         self.age = age  
  7.     
  8.     def show(self):  
  9.         print(self.name, self.age, self.grade)  
  10.    
  11.     @staticmethod  
  12.     def static():  
  13.         sex = "VU"  
  14.     
  15.         print("静态方法")  
  16.    
  17.     @classmethod  
  18.     def clss_method(cls):  
  19.         print(cls.grade)  
  20.         # print(cls.age)  
  21.     
  22.         print("类方法")  
  23.     
  24.     
  25. # Student.clss_method()  
  26. #  
  27. # Student.static()  
  28. # Student.sex  
  29. tom = Student("tom", 10)  
  30. tom.clss_method()  

注意:

  1. 可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的
  2. 类方法只能访问类变量,不能访问实例变量

即:

三:属性:

  1. class  Person:  
  2.     @property  
  3.     def name(self):  
  4.         return "tom"  
  5.    
  6.     @name.setter  
  7.     def name(self,a):  
  8.         # print(a)  
  9.         yield a  
  10.    
  11.    
  12.     @name.deleter  
  13.     def name(self, a):  
  14.         return a  

 

写法2

  1. class Persoon1:  
  2.     def get_name(self):  
  3.         print("get_name")  
  4.     
  5.     def set_name(self, name):  
  6.         print("name", name)  
  7.     
  8.     def del_name(self):  
  9.         print("del_name")  
  10.     
  11.     name = property(get_name, set_name, del_name)  

 

以上是关于面向对象 二的主要内容,如果未能解决你的问题,请参考以下文章

20165308 实验二 Java面向对象程序设计

面向对象封装案例 二

20165336 实验二 Java面向对象程序设计

实验二 Java面向对象程序设计

实验二 Java面向对象程序设计

面向对象