python 23 类中的默认属性

痞子三分冷 提交于 2020-03-10 00:16:16
# python 类中的默认属性
# /usr/sbin/py/python
# -*-coding:utf8-*-
import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def run(self):
        pass


class Cat(Animal):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def run(self):
        print("%s is running" % self.name)

    def __str__(self):
        return "类似于java中的重写toString方法:name:%s age:%s" % (self.name, self.age)

    def __repr__(self):
        return "repr方法执行"


c1 = Cat("tom", 12)
print(c1)  # 如何改变c1的输出方式  重写 str 和 repr方法


# print 执行的就是 对象下的str方法,如果对象中找不到str就会去找repr作为替代的返回结果

# 通过 format 定制输出

class Date:
    df1 = ":"
    df2 = "-"
    _format_dict = {
        df1: "{0.year}:{0.month}:{0.day}",
        df2: "{0.year}-{0.month}-{0.day}"

    }

    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    def __format__(self, format_spec):
        if not format_spec:
            fm = self._format_dict[self.df2]
        else:
            fm = self._format_dict[format_spec]
        return fm.format(self)


d1 = Date("2020", "03", "08")

print(d1.__format__(d1.df2))
print(format(d1, d1.df1))
print(format(d1))

# __slots__ 目的是为了节省内存 有__slots__ 则__dict__不存在
class Person:
    'doc注释'
    __slots__ = ["name","age"]


p1 = Person()
p2 = Person()
# print(p1.__dict__) 报错
p1.name = "jake"
print(p1.name)
# p1.hobby = "sing" 使用了__slots__就不能通过这种方式赋值
print(p1.__doc__)
print(p1.__module__) # 模块名
print(p1.__class__) # 类名
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!