美文网首页
8. 类和对象

8. 类和对象

作者: WESTWALL | 来源:发表于2018-08-14 14:29 被阅读0次

基于网络课程《Python全栈开发专题》 记录笔记,请支持正版课程

创建一个类

self, 即this。带self的是实例方法,否则是静态方法

class Person:
    
    def setName(self, name):
        self.name = name

    def getName(self):
        return self.name

    def greet(self):
        print("Hello, I'm {name}".format(name = self.name))

person = Person()
person.setName('二狗')
person.greet()

方法的私有化

方法名前加"__"双下划线
“伪私有化”:其实质是吧方法名改成了_Class__methodName的形式

class Person:
    def method1(self):
        print('method1')

    # _Class__methodName
    def __method2(self):
        print('method2')

person = Person()
person.method1()
# 报错
# person.__method2()

# 正确的调用姿势
person._Person__method2()

import inspect

methods = inspect.getmembers(person, predicate = inspect.ismethod)
for method in methods:
    print(method)

'''
输出:
('_Person__method2', <bound method Person.__method2 of <__main__.Person object at 0x000002650E1F6F98>>)
('method1', <bound method Person.method1 of <__main__.Person object at 0x000002650E1F6F98>>)
'''

类代码块

class MyClass:
    print('MyClass')
    count = 0
    def counter(self):
        self.count += 1

my = MyClass()
my.counter()
print(my.count)
'''
输出:
MyClass
1
'''

类的继承 + 检测类的继承关系

class ParentClass:
    def method1(self):
        print('method 1')

class ChildClass(ParentClass):
    def method2(self):
        print('method 2')

class SubClass(ChildClass):
    pass

parent = ParentClass()
child = ChildClass()
child.method1()
child.method2()

print(issubclass(ChildClass, ParentClass))  # True
print(issubclass(ParentClass, ChildClass))  # False

# Java: instanceof
print(isinstance(child, ParentClass))  # True
print(isinstance(child, ChildClass))   # True

print(ChildClass.__base__)
print(SubClass.__bases__)

Python类的多继承

如果有同名的方法,以继承时定义的顺序为准

class Calculator:
    def calculate(self, expression):
        self.value = eval(expression)
    def printResult(self):
        print('result: {}'.format(self.value))

class MyPrint:
    def printResult(self):
        print('计算结果: {}'.format(self.value))

class NewCalculator(Calculator, MyPrint):
    pass

class NewCalculator2(MyPrint, Calculator):
    pass

c1 = NewCalculator()
c1.calculate('1 + 1')
c1.printResult()

c2 = NewCalculator2()
c2.calculate('1 + 2')
c2.printResult()

print(NewCalculator.__bases__)
print(NewCalculator2.__bases__)

接口

# hasattr  getattr  setattr

class MyClass:
    def method1(self):
        print('method1')
    def method2(self):
        print('method2')
    def default(self):
        print('default')

myClass = MyClass()

if hasattr(myClass, 'method1'):
    myClass.method1()
else:
    print('method1方法不存在!')

getattr(myClass, 'method2')()
# 不存在的方法,返回default
getattr(myClass, 'method21', myClass.default)()

def fun():
    print('fun')

# 默认值可以指定成一个别的函数
getattr(myClass, 'asdf', fun)()

def process():
    print('动态添加的process方法')

setattr(myClass, 'abc', process)
myClass.abc()

myClass1 = MyClass()
# setattr 是添加到实例里,另外一个实例就不能用的
# myClass1.abc()

相关文章

  • 8. 类和对象

    基于网络课程《Python全栈开发专题》 记录笔记,请支持正版课程。 创建一个类 self, 即this。带sel...

  • 8.类和对象的关系

    课程来自慕课网Visitor.zc老师 创建类的对象 属性和成员变量 main.m People.h People.m

  • 对象、类对象和元类对象

    http://www.tuicool.com/articles/mmyuUr http://blog.csdn.n...

  • python 类和对象

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的...

  • 类,类对象和实例对象

    Python 的类定义写完之后就成了一个类对象,而引用这个类对象的就是实例对象。 类中定义的属性和方法都是静态属性...

  • 面相对象-02类和对象

    类和对象 目标 ●类和对象的概念●类和对象的关系●类的设计 01.类和对象的概念 类和对象是面向对象编程的两个核心...

  • 8. object对象和伴生对象

    1. object对象 Kotlin中没有静态属性和方法,但是可以使用关键字object声明一个object单例对...

  • python语法入门五

    类和对象 类和对象 基础 继承:python为多继承 类、类对象和实例对象 当实例对象声明后,再删除类对象,那么该...

  • 8.类和函数

    本节深入介绍了unittest的API。 8.1 测试用例Test cases相关 unittest.TestCa...

  • 13.Python类和对象

    目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核...

网友评论

      本文标题:8. 类和对象

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