面向对象编程--类属性,实例属性

面向对象编程–类属性,实例属性

       ##  类属性:类属性是在类中的方法之外定义的属性,又分为公有属性和私有属性,不像C++通过public和private关键字
                  区别公有属性何和私有属性,Python是以是属性命名的方式来区分的,如果在属性明前加了两个下划线,则表明
                  该属性是私有属性,否则就是公有属性。
       ##  实例属性: 实例属性又称静态属性,实例属性作为实例对象的属性,不能通过类名调用,只能单独给特定的对象所拥有
                  。也就是说,实例对象是系统另外开辟了一个内存给其类的实例化存取相应的初始化对象,实例属性在类中的构
                  造函数__init__中定义,定义以self作为前缀。

下面以一段代码来解释上述性质:

_author_ = "huangwave"

# 类
# 一个类即是对一类拥有相同属性的对象的抽象
# ,蓝图,原型。在类中丁怡了这些对象的都具备
# 的属性,共同的方法。

# 对象
#
# 一个对象是对一个类的实例化后的实力,
# 一个类必须领过实例化方可在程序中调用,
# 一个类可以实例化多个对象,每个对象亦有
# 不同的属性,就像人类是指所有人,每个人
# 是指具体的对象,人和人有相同,亦有不同。

# creat a object ,human
class Person(object):
    # def a init
    n = 1  # 类变量
    def __init__(self, name, shenggao, tizhong):
        # 构造函数
        # 在实例化的时候,
        # 做一些实例化的初始化工作
        self.name = name  # 实例变量(静态属性),实例变量的作用域是自己本身
        self.shenggao = shenggao
        self.tizhong = tizhong
        print("测试对象的名字是%s,身高为%s,体重为%s" %(self.name,
                                         self.shenggao, self.tizhong))

    # def a classmethod
    def check_health(self):
        # 类方法本身都在类里存储
        BIM = self.tizhong/pow(self.shenggao,2)
        if BIM > 25 and BIM < 28:
            print("【%s】处于正常区间范围内,请保持!" % self.name)
        elif BIM > 28:
            print("【%s】处于肥胖区间范围内,请改善!" % self.name)
        else:
            print("【%s】处于偏瘦区间范围内,请改善!" % self.name)
# while True:
#     name = input("请输入要测试人的姓名:")
#     shenggao = eval(input("请输入要测试人的身高(单位:m):").strip("m"))
#     tizhong = eval(input(("请输入要测试人的体重(单位:kg):").strip("kg")))
#
#     a = Person(name, shenggao, tizhong)
#     a.check_health()
Person.n = 3#类属性它通过类名调用
Person.lian = "smile"  # 类属性可以通过类名在外部定义,可以通过类名调用
person1 = Person("shen",1.7,50)  # 也可以通过实例对象进行调用
print(person1.lian)  # 实例对象调用类属性而打印。
print(Person.n)  # 类名调用自己的类属性

print(Person.name) #类名不能调用实例属性

谢谢浏览!!!

你可能感兴趣的:(面向对象编程(oop),面向对象编程--类属性,实例属性)