视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
类的简介和属性介绍
2020-11-27 14:23:32 责编:小采
文档


一、概述

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

下载本文
显示全文
专题