Python进阶学习之面向对象

Posted smallblackegg

tags:

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

面向对象

? python也有面向对象的编程,它与C++中的类有点相似。它也只是运算符重载,继承。

class Test:
   num=0
   def __init__(self):
      # self.num=9 #print结果是9
      Test.num=10  #print结果是10
t=Test()
print(t.num)

但是在python中类中的变量全是共有的,可以通过Test.num来进行访问;在类中,初始化的构造函数并不是以Test()[Test()方法是C++中的构造函数]这种方式来声明,而是以__init__()函数来声明。构造函数中self代表的是累的实例,并非是类,类的方法与普通函数只有一个特殊的区别,就是在类中的方法必须要有第一个参数名称,按照惯例,他的名称是self。

class Employee:  #所有员工的基类
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1

   def displayCount(self):
      print("Total Employee %d" % Employee.empCount)

   def displayEmployee(self):
      print("Name : ", self.name, ", Salary: ", self.salary)

emp1 = Employee("Zara", 2000)  #创建 Employee 类的第一个对象
emp2 = Employee("Manni", 5000)#创建 Employee 类的第二个对象
emp1.displayEmployee()
emp2.displayEmployee()
print("Total Employee %d" % Employee.empCount)
Name :  Zara , Salary:  2000
Name :  Manni , Salary:  5000
Total Employee 2

上述代码的输出中,大家可能对于“Total Employee 2”比较有疑惑,这是因为empCount是类属性,而不是对象属性。类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++、Java中类的静态成员变量有点类似。对于公有的类属性,在类外可以通过类对象和实例对象访问。上述代码中的name和salary都是实例属性,每一个对象都会拥有一个自己的name和salary,而且实例属性也可以只在在类外通过“实例对象.实例属性"来进行自定义设置,但是这种一般不建议,为了更好的封装性,还是建议将所有的实例属性放置在类中。

私有属性

class JustCounter:
   __secretCount = 0  # 私有变量
   publicCount = 0  # 公开变量

   def count(self):
      self.__secretCount += 1
      self.publicCount += 1
      print(self.__secretCount)
      
counter = JustCounter()
counter.count()
counter.count()
print(counter.publicCount)
# print(counter.__secretCount)#错误,实例不能访问私有变量
print(counter._JustCounter__secretCount)
 #可以使用 object._className__attrName访问属性

私有属性是不可以在类外进行访问的,若需访问,则需要通过代码中的方法进行访问。

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

Python学习之面向对象进阶

Python面向对象学习之八,装饰器

python学习之函数学习进阶

python学习之面向对象程序设计的一些思考

python学习之面向对象学习

python3学习之对象