美文网首页
2019-01-11day15 personal review

2019-01-11day15 personal review

作者: woming | 来源:发表于2019-01-11 19:40 被阅读0次

1、文字说明:

类和对象
类是具有相同属性和相同方法的的对象的集合,是抽象的
对象就是类的实例,是具体的
1.类的声明
类名要求是标识符,不能是关键字,首字母大写,驼峰式命名
class 类名:
    类中的属性
    类中的方法:1.对象方法(实例方法):
                    调用方式:对象.对象方法名()
              2.类方法:
                    调用方式:类.类方法名()
              3.静态方法
                    调用方式:类.静态方法名()
              
2.创建对象
类()

2. 具体实际使用:

class Person:
    """我是用来做今天的课后review的类和对象的例子的说明文档"""

    # 类的字段
    num = 60

    # 约束当前类的对象的属性个数,可少不可多。
    # __slots__ = ('name', 'age', 'sex')

    # __init__方法,是对象方法,专门用来对创建的对象进行初始化
    def __init__(self, name='', age=0, sex=''):
        self.name = name
        self.age = age
        self.sex = sex

    # 对象方法
    def walk(self, distance):
        print('%s今天走了%f公里' % (self.name, distance))
        return '这个是调用对象方法的返回值'

    # 类方法
    @classmethod
    def history(cls, time):
        print('人类历史有%d万年' % time)
        return '这是调用类方法的返回值'

    # 静态方法
    @staticmethod
    def func1():
        print('这是个静态方法')

    # 打印对象的时候,通过__repr__方法可以让打印对象输出的内容为return后面的内容
    def __repr__(self):
        return str(self.__dict__)[1:-1] + ' object at' + hex(id(self))


def main():

    # ===========对象方法==========
    # 创建对象
    p1 = Person('小明', 23, '男')
    p2 = Person('小李', 18, '女')

    print('==========调用对象方法')
    # 调用对象方法,首先要有个对象
    p1.walk(2.5)
    print(p1.walk(42.195))

    print('=========查找对象属性')
    # 用'对象.属性名'的方法查找对象属性,如果没有这个属性就会报错
    name = p1.name
    age = p1.age
    sex = p1.sex
    print('用"对象.属性名"的方法来查找:%s, %d, %s' % (name, age, sex))

    # 用'getattr(对象,属性名:str,默认值)'的方法查找对象属性,如果没有这个属性就返回默认值。
    name = getattr(p1, 'name', None)
    age = getattr(p1, 'age', None)
    sex = getattr(p1, 'sex', None)
    tel = getattr(p1, 'tel', '我是默认值')
    print('用"getattr(对象,属性名:str,默认值)"的方法来查找:%s, %d, %s, %s' % (name, age, sex, tel))

    print('==============对象属性增/改')
    # 用'setattr(对象, 属性名:str, 值)'的方法,如果对象属性存在就修改,如果不存在就增加
    # 如果用了__slots__方法,就不能随便增加对象属性了
    setattr(p1, 'name', '小李')
    setattr(p1, 'tel', 123456)
    print('修改对象属性:', p1.name)
    print('增加对象属性:', p1.tel)

    print('============删除对象属性')
    # del 对象.属性名
    del p1.name

    # delattr(对象,属性名:str)
    delattr(p1, 'age')

    print('==========类方法')
    # 调用类方法,类.类方法名()
    Person.history(2)
    print(Person.history(2))

    p1.__class__.history(2)

    print('==========静态方法')
    # 调用类方法,类.静态方法名()
    Person.func1()

    p2.__class__.func1()

    print('=========内置属性')
    # 类.__name__  - 获取当前类的名字(是个字符串)
    print(Person.__name__, type(Person.__name__))

    # 对象.__class__  - 获取对象的类,具有类的所有功能
    print('我是类的字段num:', p2.__class__.num)

    # 对象.__dict__  - 将对象转换成字典,对象属性名和值对应字典的键值对
    # 注意:当给__slots__属性赋值后,对象的__dict__属性就不能使用
    print('把对象属性转换成字典:', p2.__dict__, type(p2.__dict__))

    # 类.__module__  - 获取当前类所在模块的模块名(字符串)
    print('当前类所在模块名:', Person.__module__, type(Person.__module__))

    # 类.__bases__  - 获取当前类的父类(返回元祖)
    print('当前类的父类:', p2.__class__.__bases__, type(p2.__class__.__bases__))

    # 类.__doc__  - 获取类的说明文档
    print(Person.__doc__, type(Person.__doc__))

    print('==============使用__repr__方法之后打印对象')
    print(p2)


if __name__ == '__main__':
    main()

相关文章

网友评论

      本文标题:2019-01-11day15 personal review

      本文链接:https://www.haomeiwen.com/subject/eclfdqtx.html