python3.7入门系列十 类和对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bowei026/article/details/90112056


在面向对象编程中,类是定义对象的通用行为和属性,是对象的模板。根据类可以创建对象,叫对象实例化。
创建Person 类
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print('my name is ' + self.name + ' and age is ' + str(self.age))


tom = Person('Tom', 18)
tom.introduce()
运行结果:
my name is Tom and age is 18

类中的函数叫方法,Person类中有2个方法__init__() 和 introduce()
__init__方法
__init__方法,又叫构造函数,创建一个类的实例时调用的方法。 tom = Person('Tom', 18) 语句就是调用了__init__方法。
两个下划线开头的方法又是私有的方法,不能在类的外部调用。两个下划线开头的属性是私有属性,不能被类外直接使用
类方法中的第一个参数self,是python的专有语法,代表对象实例自己本身,与java的this作用一致。并且类中方法的第一个参数必须是self(名字可以自己改成别的)

introduce方法
introduce()方法没有以2个下划线开头,所以能被类的外部调用,实例化 tom 对象之后,就能调用tom的introduce()方法,同样必须至少有一个参数self,代表程序运行时的对象本身

创建对象
jack = Person('Jack', 24)
# 调用属性
print(jack.name)
# 调用方法
jack.introduce()
运行结果:
my name is Jack and age is 24
因为name对象没有以2个下划线开头,所以能够被类的外部调用。同样也可以调用introduce()方法

私有方法和私有属性
class Person:
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def introduce(self):
        desc = self.__get_age_desc()
        print('my name is ' + self.name + ' and ' + desc)

    def __get_age_desc(self):
        if self.__age >= 18:
            return '已成年'
        else:
            return '未成年'

    def get_age(self):
        return self.__age


tom = Person('Tom', 18)
tom.introduce()
print(tom.name)
print(tom.get_age())
上面的代码定义了一个私有属性__age 和一个私有方法 __get_age_desc,私有属性和私有方法都只能在类的内部调用,并以self.开头的方式访问,如self.__age 和 self.__get_age_desc()
私有属性和私有方法不能被对象实例使用,如下代码执行会报语法错误
tom.__age
AttributeError: 'Person' object has no attribute '__age'

tom.__get_age_desc()
AttributeError: 'Person' object has no attribute '__get_age_desc'
但是可以提供另外的一个公有的方法返回私有属性的值,供对象访问,如上面的get_age() 方法

本文内容到此结束,更多内容可关注公众号和个人微信号:

猜你喜欢

转载自blog.csdn.net/bowei026/article/details/90112056