目录
一、类属性的概念:
即为类对象所拥有的属性,它是被所有类对象的实例对象所共有,类对象和实例对象皆可访问
#示例1
class Animal(object): #创建一个Animal类
name='小美' #类属性
color='黄色' #类属性
pass
d1=Animal() #创建Animal类的实例对象d1
d1.name #实例对象d1访问类属性
结果:
小美
#示例2
class Animal(object): #创建一个Animal类
name='小美' #类属性
color='黄色' #类属性
pass
d1=Animal() #创建Animal类的实例对象d1
Animal.name #类Animal访问类属性
结果:
小美
18
#示例3
class Animal(object): #创建一个Animal类
name='小美' #类属性
color='黄色' #类属性
pass
d1=Animal() #创建Animal类的实例对象d1
Animal.name #类Animal访问类属性
print(Animal.age) #尝试Animal类访问实例属性
结果报错,提示 type object 'Animal' has no attribute 'age'
二、实例属性的概念:
实例属性即实例对象所拥有的属性,只能是实例对象访问
#示例1
class Animal(object): #创建一个Animal类
name='小美' #类属性
color='黄色' #类属性
pass
d1=Animal() #创建一个Animal的实例对象d1
print(d1.name) #实例对象d1访问类属性name
d1.age=18 #给实例对象添加实例属性
print(d1.age) #实例对象访问实例属性
结果:
小美
18
#示例2
class Animal(object): #创建一个Animal类
name='小美' #类属性
color='黄色' #类属性
pass
def __init__(self,age): #利用__init__方法进行初始化
self.age=age #这是实例属性
d1=Animal(18) #创建一个Animal的实例对象d1
print(d1.name) #实例对象d1访问类属性name
print(d1.age) #实例对象访问实例属性
print(Animal.name) #类Animal访问类属性name
结果:
小美
18
小美
三、类方法的概念:
是类对象拥有的方法,需要用到装饰器@classmethod来标识其为类方法。类方法里的第一个参数必须为类对象,一般以cls作为第一个参数,类方法可以通过类对象、实例对象调用。
- 类方法是可以被我们创建的类和实例对象所调用,而实例方法只能由实例对象调用。
- 类方法包包含实例方法
#示例1
class Person(object): #创建Person类
country = 'China' #定义类属性
def __init__(self,name,age): #利用___init__方法进行初始化
self.name=name #实例属性
self.age=age #实例属性
@classmethod #lassmethod修饰,下面的方法为类方法
def get_country(cls):
print(cls.country)
d1=Person('小明',18) #创建实例对象d1
d1.get_country() #实例对象调用类方法
Person.get_country() #类对象Person调用类方法
结果:
China
China
#示例2
class Person(object): #创建Person类
country = 'China' #定义类属性
def __init__(self,name,age): #利用___init__方法进行初始化
self.name=name #实例属性
self.age=age #实例属性
def Eat(self):
print('大口吃地吃饭')
@classmethod #lassmethod修饰,下面的方法为类方法
def get_country(cls):
print(cls.country)
d1=Person('小明',18) #创建实例对象d1
d1.get_country() #实例对象调用类方法
Person.get_country() #类对象Person调用类方法
d1.Eat() #实例对象调用实例方法Eat
Person.Eat() #类对象调用实例方法Eat
结果:
China
China
大口吃地吃饭
报错"Eat() missing 1 required positional argument: 'self'"
说明了类对象不能调用实例方法
四、静态方法的概念:
是类对象拥有的方法,需要用@staticmethod来表示静态方法,其不需要任何参数
- 静态方法里没有“self”和“cls”参数
- 类和实例对象都可以调用
- 方法体中不能使用类或实例的任何属性和方法,与它们没有交互操作
- 静态方法一般用来存放逻辑性代码;数据资源得到有效地利用
#示例
class Person(object): #c创建一个Persosn类
country = 'China' #类属性
@staticmethod #装饰器,下面的方法是静态方法
def eat(): #静态方法无参数
print('大口大口地吃')
@staticmethod #装饰器,下面的方法是静态方法
def run(): #静态方法无参数
print('飞快地跑起来')
d1=Person() #创建Person的实例对象d1
d1.eat() #实例对象调用eat方法
d1.run() #实例对象调用run方法
Person.eat() #类对象调用eat方法
Person.run() #类对象调用run方法
结果:
大口大口地吃
飞快地跑起来
大口大口地吃
飞快地跑起来
五、私有化属性的概念:
将重要属性保护起来,即定义为私有属性,不可随意修改,只能通过一个更安全的可调用的方法去访问。
- 私有化属性不可通过外部直接调用,但可在类的内部随意使用,也可以在类的内部随意修改
- 在属性名前加上双下划线 __xxx
- 私有属性不可以被子类所继承
#示例1
class Animal(object): #创建Animal类
def __init__(self): #利用__init__方法初始化
self.name='小美' #实例属性
d1=Animal() #创建Animal的实例对象d1
d1.name #通过实例对象访问
结果:
小美
#示例2
class Animal(object): #创建Animal类
def __init__(self): #利用__init__方法初始化
self.__name='小美' #将实例属性进行私有化,不再通过外部访问
d1=Animal() #创建Animal的实例对象d1
d1.__name #通过实例对象在外部访问
结果:
报错'Animal' object has no attribute '__name'
#示例3
class Animal(object): #创建Animal类
def __init__(self): #利用__init__方法初始化
self.__name='小美' #将实例属性进行私有化,不再通过外部访问
def __str__(self): #利用__init__方法自定义格式并返回数据
return '{}的年龄是{}'.format(self.__name,self.__age)
d1=Animal() #创建Animal的实例对象d1
print(d1)
结果:小美的年龄是18
#示例4
class Animal(object): #创建Animal类
def __init__(self): #利用__init__方法初始化
self.__name='小美' #将实例属性进行私有化,不再通过外部访问
def xiugai(self): #定义xiugai实例方法
self.__name='小明' #修改私有属性
def __str__(self): #利用__init__方法自定义格式并返回数据
return '{}的年龄是{}'.format(self.__name,self.__age)
d1=Animal() #创建Animal的实例对象d1
d1.xiugai() #实例对象d1调用实例方法,这个实例方法可以修改私有化属性
print(d1)
结果:
小明的年龄是18
#未完待续。。。。。