- 类和对象
类和对象
基础
'继承'
class MyList(list):
pass
list1 = MyList()
list1.append(3)
list1.append(2)
list1.append(1)
print(list1)
# [3, 2, 1]
list1.sort()
print(list1)
# [1, 2, 3]
'创建类'
class Ball:
def setName(self, name):
self.name = name
def kick(self):
print('我是%s' % self.name)
a = Ball()
a.setName('A')
a.kick()
# 我是A
'初始化方法'
class Ball:
def __init__(self, name):
self.name = name
def kick(self):
print('我是%s' % self.name)
a = Ball('AA')
a.kick()
# 我是AA
'私有属性'
class Person:
__name = '我是私有属性'
def getName(self):
return self.__name
p = Person()
print(p.getName())
# 我是私有属性
print(p._Person__name)
# 我是私有属性
继承:python为多继承
class Parent:
def hello(self):
print('父类方法')
class Child(Parent):
def hello(self):
print('子类方法')
p = Parent()
p.hello()
# 父类方法
c = Child()
c.hello()
# 子类方法
'覆盖父类方法'
class Fish:
def __init__(self):
self.x = 0
self.y = 0
print('位置:', self.x, self.y)
class Shark(Fish):
def __init__(self):
Fish.__init__(self) # 调用未绑定的父类方法
self.other = 'none'
shark = Shark()
# 位置: 0 0
class Shark(Fish):
def __init__(self):
super().__init__() # 调用super方法
self.other = 'none'
shark = Shark()
# 位置: 0 0
类、类对象和实例对象
'类、类对象和实例对象的关系'
class Num:
cnt = 0
a = Num()
b = Num()
c = Num()
print(a.cnt)
# 0
print(b.cnt)
# 0
print(c.cnt)
# 0
c.cnt += 10
print(a.cnt)
# 0
print(b.cnt)
# 0
print(c.cnt)
# 10
'类对象值发生改变,由于实例对象c之前已经覆盖了类对象的cnt,'
'因此不发生改变'
Num.cnt += 100
print(a.cnt)
# 100
print(b.cnt)
# 100
print(c.cnt)
# 10
class A:
def x(self):
print('输出x')
a = A()
a.x()
# 输出x
a.x = 1
print(a.x)
# 1
a.x()
# (抛出异常,此时方法将不可用,不建议创建此属性)
当实例对象声明后,再删除类对象,那么该实例对象仍然可以使用类对象已有的方法等,因为实例对象一般是在程序运行结束后才被回收的