类的简介和属性介绍


本文摘自php中文网,作者巴扎黑,侵删。

一、概述

1.定义类(class Dog(object))--> 实例化(d = Dog())---> 实例对象(d)

2. __init__() 构造函数

3. self.name = name 类的属性、成员变量

4. def say_hi() 类的方法 、动态属性

二、访问类的属性

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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 访问类的属性和方法

  我们用 实例对象.属性/方法 来访问

1

2

3

4

5

6

7

8

9

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这个角色的武器属性是,会发现他的武器没有改变:

1

2

3

4

5

6

r2.buy_gun('B13')

print(r2.weapon)

 

# 输出

Jack just bought B13

B22       # 可以发现武器依然是 B22

  其实我们可以在购买武器是直接改变对象的属性:

1

2

3

4

5

6

7

8

9

10

11

12

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、定义私有属性

  类的属性一旦被定义成私有属性,就不能被外部调用和随意修改。私有属性只能在类是内部使用。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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的方法访问私有属性

  外部不能直接访问私有属性,但是在类的内部可以访问,所以我们可以定义一个方法来获取私有属性。  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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 强制访问私有属性

  我们还可以通过一种方法来强制访问私有属性,甚至修改私有属性的值。方法:对象名._类名__属性名。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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

以上就是类的简介和属性介绍的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python读写excel文档

Python自学用什么书

Python中关于with的用法

Python怎么调用api接口

supervisor的简单介绍

Python 的 help 函数使用

了解Python 中日志异步发送到远程服务器

Python下的selenium安装的过程分享

Python如何实现可视化热力图

Python如何安装matplotlib

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...