一、概述1.定义类(class dog(object))--> 实例化(d = dog())---> 实例对象(d)
2. __init__() 构造函数
3. self.name = name 类的属性、成员变量
4. def say_hi() 类的方法 、动态属性
二、访问类的属性class role(object):
def __init__(self, name, role, weapon, life_value=100, money=15000):
self.name = name
self.role = role
self.weapon = weapon
self.life_value = life_value
self.money = money
def shot(self):
print("%s is shooting..." % self.name)
def got_shot(self):
print("ah...,%s got shot..." % self.name)
def buy_gun(self, gun_name):
print("%s just bought %s" % (self.name,gun_name))
r1 = role('alex', 'police', 'ak47') # 生成一个角色
r2 = role('jack', 'terrorist', 'b22') # 生成一个角色
2.1 访问类的属性和方法我们用 实例对象.属性/方法 来访问
r1.shot() # 调用shot 方法
r2.buy_gun('b13') # 调用 buy_gun的方法并传参
print(r1.role) # 打印类的属性
# 输出
alex is shooting...
jack just bought b13
police
2.1 修改对象的属性在上例中我们为r2这个角色更换了武器,即 b22 --> b13。但实际上我们调用r2这个角色的武器属性是,会发现他的武器没有改变:
r2.buy_gun('b13')
print(r2.weapon)
# 输出
jack just bought b13
b22 # 可以发现武器依然是 b22
其实我们可以在购买武器是直接改变对象的属性:
def buy_gun(self, gun_name):
print("%s just bought %s" % (self.name, gun_name))
self.weapon = gun_name # 在方法内改变属性
r2.buy_gun('b13')
print(r2.weapon)
#输出
jack just bought b13
b13 # 可以发现武器已经改变
三、私有属性3.1、定义私有属性 类的属性一旦被定义成私有属性,就不能被外部调用和随意修改。私有属性只能在类是内部使用。
class person(object):
def __init__(self, name, job, phone, address):
self.name = name
self.job = job
self.phone = phone
self.__address = address # 定义一个私有属性
def sayhi(self):
print("hell,%s" % self.name)
p1 = person('bigberg', 'doctor', '8833421', 'hz')
print(p1.name)
print(p1.__address) # 访问私有属性
# 输出
bigberg
file "g:/python/untitled/study6/类的私有属性.py", line 17, in <module>
print(p1.__address)
attributeerror: 'person' object has no attribute '__address'
运行的结果是访问属性name是可以通过的,但是直接访问私有属性 self.__address 报错了。但是如果通过其他的方法,还是可以访问的到的。
3.2、get的方法访问私有属性外部不能直接访问私有属性,但是在类的内部可以访问,所以我们可以定义一个方法来获取私有属性。
class person(object):
def __init__(self, name, job, phone, address):
self.name = name
self.job = job
self.phone = phone
self.__address = address
def get_private(self):
return self.__address
def sayhi(self):
print("hell,%s" % self.name)
p1 = person('bigberg', 'doctor', '8833421', 'hz')
res = p1.get_private()
print(res)
# 输出
hz
3.3 强制访问私有属性我们还可以通过一种方法来强制访问私有属性,甚至修改私有属性的值。方法:对象名._类名__属性名。
class person(object):
def __init__(self, name, job, phone, address):
self.name = name
self.job = job
self.phone = phone
self.__address = address
def get_private(self):
return self.__address
def sayhi(self):
print("hell,%s" % self.name)
p1 = person('bigberg', 'doctor', '8833421', 'hz')
print(p1._person__address) # 访问私有属性
print("----change----")
p1._person__address = 'bj' # 修改私有属性
print(p1._person__address)
#输出
hz
----change----
bj
类是简化和优化应用程序的重要工具。
1.继承性:子类沿用父类特征的能力。体现并扩充了面向对象程序设计方法的共享性,使得同类型对象共享数据与程序代码,提高了程序的复用性。父类是可以进一步定义派生新类的类,子类是以其他类为起点,通过更具体的特征定义所建立的新类。
2.多态性:一些关联的类包含同名的方法程序,但方法程序的内容可以不同。调用哪种在运行时根据对象的类确定,同样的 消息被不同的对象接收时可导致不同的行动。
3.抽象性:提取一个类或对象与众不同的特征,而不对该类或对象其他信息进行处理。
四、总结1、定义私有属性:self.__private_attr_name = private_attr_name
2、强制访问私有属性:对象名._类名__属性名(d._dog__sex)
3、对外提供只读接口访问:
def get_sex(self):
return self.__sex
以上就是类的简介和属性介绍的详细内容。
