类和对象

2018-06-30  本文已影响0人  丫丫姑娘_b55e
假的私有属性

//实际开发中,声明类的属性,很少会使用真正的私有属性和公开属性(前面加两个下滑线的)。

实际对属性的要求:1.可以通过点语法方便的来给属性赋值或者拿到它的值(不能是私有的)
假的私有属性满足要求: 就使用假的私有属性 + getter和sette

  1. 声明私有属性,属性名前加一个下划线(这个是规范,不是语法:带一个下划线的属性,不要直接通过一个下划线对应的属性名去访问这个属性)
  2. 通过给属性添加getter和setter来限制赋值和获取值的过程
    a. 添加getter: --> 限制获取属性值的操作
    b. getter的作用:返回属性的值
  1. 在类的外部通过不带下划线的属性去获取属性的值,或者给属性赋值
    示例一:

     class Person
     def _ _init _ _(self, name=' ' ,age=0) :
       self.name = name
       self.age = age
     #给name属性添加getter
     @property
     def name(self):
       if len(self.name) == 0:
         return '空'
       return self.name
       #给name属性添加setter
     @name.setter
     def name(self, name1) :
       if isinstance(name1, str):
         self.name = name1
     p1 = Person(' 小明')
    

//getter一般要添加,setter一般不用写
//如果要添加setter必须添加getter

类字段和类方法

1.类字段就是类属性:通过类去获取
类字段是声明在类里面,函数外面的变量

class Person:
"""人类"""
# 这个person_num就是一个类字段
person_num = 0

2.类方法:通过类去调用
开发中怎么确定 声明 方法是对象方法还是类方法:看实现的功能是否需要对象属性来支持,如果需要就必须声明称对象方法

@classmethod来说明下面的函数是一个类方法 --> 函数修饰符
# 所有的类方法都有一个默认参数cls,这个参数不需要传参,系统会自动将调用方法的类传给它(谁调用指向谁)

@classmethod
def hurt_earth(cls):
    print(cls)
    print('人类伤害破坏环境,伤害地球', Person.person_num, cls.person_num)

//类字段要用类去使用
print(Person.person_num)
//通过Person类调用类方法
Person.hurt_earth()
print(Person)

静态方法需要使用类来调用
print(Math.multiply(10, 4))
示例二:静态方法和类方法的区别
静态方法和类方法都是通过类去调用

区别:

  1. 类方法都有一个默认参数cls指向调用方法的类,但是静态方法没有
  2. 类型不一样,静态方法的类型是function,类方法的类型是method
上一篇下一篇

猜你喜欢

热点阅读