python面向对象:变量和方法
基本概念
类:类是现实世界或者思维世界中的实体在计算机中的反应,它将数据以及对数据的操作封装在一起。
数据成员:用来表征对象特性的属性
成员方法:用来体现对象行为并且封装在类中的函数
类变量:类的变量,抽象层级
实例变量:对象的特征,现实层级
类和对象的关系:类是对某一类象的抽象化,通过类可以产生多个对象
类的声明
类名首字母应该大写,且遵循驼峰法C
定义一个类
class CivilEngineer():
name = ''
project = ''
def __init__(self,name,project):
self.name = name
self.project = project
def eat(self):
print(self.name + '负责了' + self.project )
实例化
按照不同的属性通过实例化生成不同的对象。
person = Person()
person.showInfo()
构造函数:
通过构造函数可以根据参数生成不同的对象,构造函数在类被实例化时会被自动调用,返回值只能为None
def __init__(self,name,project):
self.name = name
self.project = project
方法的定义
self
和php中的$this
以及JS中的this
关键字作用相同,用来引入内部属性/数据成员或者方法。
def showInfo(self):
print(self.name + '今年' + str(self.age) + '岁' )
实例方法
def eat(self):
print(self.name + '吃东西')
在实例方法的内部访问类变量
可以借助__class__访问类变量:
class Student():
sum = 0 # 类变量
def total(self):
self.__class__.sum += 1 #操作类变量
print(self.__class__.sum)
print(Student.sum) #获取类变量
Student().total() # 实例方法操作类变量
类方法
类方法主要用来操作类变量 声明方法如下
在定义方法前增加装饰器 @classmethod,参数列表中传入cls(可更改),类方法用来操作类变量
class Person:
@classmethod
def plus_sum(cls):
pass
类方法对类变量的操作
class Person:
sum = 0
@classmethod
def total(cls):
print(cls.sum)
Person.total() # 类方法被类调用
Person().total() # 类方法被实例调用
从上面的代码中可以看出,类方法可以更加方便的引用并操作类变量,而不像实例方法那样需要借助__class
!!! 类方法可以被类和实例调用,但不建议使用实例对象调用类方法
静态方法
静态方法通过使用@staticmethod装饰器来声明
class Person:
sum = 0
@classmethod
def total(cls):
print(cls.sum)
@staticmethod
def add():
print(Person.sum) #实例方法访问类变量
print('static method')
Person.total() # 类调用类方法
Person.add() # 类调用静态方法
Person().add() # 实例调用静态方法
python中不常使用静态方法,静态方法可以访问实例变量和类变量