1.类变量和实例变量
-
类变量:变量属于类,在对象中是共用的。访问方式为
类名.变量名
,或对象名.__class__.变量名
-
实例变量:定义在方法中的变量,属于具体对象。访问方式为
对象名.变量名
类变量访问方式
class Car:
# num 属于类变量
num = 0
# brand, version属于实例变量
def __init__(self, brand, version):
self.brand = brand
self.version = version
self.__class__.num += 1
c1 = Car('audi','A6')
c2 = Car('mercedes','E300')
print(Car.num)
print(c2.__class__.num)
2.类方法
属于类的方法。参数不使用self
,使用cls
。方法前会加上@classmethod
修饰符
类变量访问方式
class Car:
num = 0
def __init__(self, brand, version):
self.brand = brand
self.version = version
self.__class__.num += 1
# 定义类方法
@classmethod
def get_total(cls):
print(cls.number)
c1 = Car('audi','A6')
c2 = Car('mercedes','E300')
# 调用类方法
Car.total()
3.类的私有属性和私有方法
私有属性和私有方法在类的外部不能被直接访问。
类变量访问方式
class Car:
def __init__(self, brand, version):
self.brand = brand
# 定义私有属性
self.__version = version
# 定义方法
def get_version(self):
print(self.__version)
# 定义私有方法
def __get_version_2(self):
print(self.__version)
c1 = Car('audi','A6')
c2 = Car('mercedes','E300')
# 访问私有属性报错
>>> c1.__version
# 通过类的方法可以访问私有属性
>>> c1.get_version()
A6
# 访问私有方法报错
c1.__get_version_2()
4.@property装饰器
用该装饰器将方法装饰成属性方法,可以以访问属性的方式访问。
类变量访问方式
class Car:
def __init__(self, brand, version):
self.brand = brand
# 定义私有属性
self.__version = version
# 定义方法
def get_version(self):
print(self.__version)
# 用该装饰器将方法装饰成属性方法,可以以访问属性的方式访问
@property
def version_2(self):
print(self.__version)
c1 = Car('audi','A6')
c2 = Car('mercedes','E300')
# 访问属性方法
>>> c1.version_2
version: A6
5.super()关键字
在子类创建过程中,super()
相当于调用父类的方法,且不用在方法中写入self
变量。
类变量访问方式
# 父类Car
class Car:
def __init__(self, brand, version):
self.brand = brand
self.__version = version
# 子类Truck
class Truck(Car):
def __init__(self, brand, version, category):
super().__init__(brand, version)
self.category = category
6.静态变量和静态方法
- 1中的类变量一般就是静态变量。
- 静态方法是通过
@staticmethod
装饰器将方法声明为静态方法,无法使用cls和self参数访问类或实例的变量