Python基础概念
1、父类和子类的关系
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# python中的super(Net, self).__init__()
# 假设Net的父类比如是类NNet;super(Net, self)就是把类Net的对象self转换为类NNet的对象;.__init__()就是“被转换”的类NNet对象调用自己的init函数
#
class Person(object): # 任何对象都可以继承于object
def __init__(self, name, gender, age):
self.name = name
self.gender = gender
self.age = age
# 注意:继承中子类对于父类的(构造)(初始化)即_init__()方法不会被自动调用,它需要在其子类的中亲自_init__()方法中专门调用
class Student(Person): # Student 继承于 Person
def __init__(self, name, gender, age, school, score):
super(Student, self).__init__(name, gender, age) # 从父类Person中引入name,gender,age 属性 也是在子类的构造方法中调用父类的构造方法
# self.name = name.upper() # title()首字母大写 lower()所有字母小写 upper()所有字母大写
# self.gender = gender.upper()
# self.age = age
self.school = school
self.score = score
s = Student('Alice', 'female', 18, 'Middle school', 87)
print(s.school)
print(s.name)
print(s.age)
# 定义一个动物类Animal为基类,它基本两个属性name和age、一个方法call
class Animal(object): # 所有类都可以继承于object基类
def __init__(self, name, age):
self.name = name
self.age = age
def call(self):
print(self.name, '会叫')
# 定义一个Cat 猫类继承于Animal,猫类比动物类多一个sex属性
class Cat(Animal): # Cat继承于Animal
def __init__(self, name, age, sex):
super(Cat, self).__init__(name, age) # 继承父类的属性
self.sex = sex
def call(self): # 对父类方法重构作为子类的方法 (若没有重构,子类则会继承父类的方法)
print(self.name, '会“喵喵”叫')
# 定义一个Dog 狗类继承于Animal,狗类比动物类多一个sex属性
class Dog(Animal):
def __init__(self, name, age, sex):
super(Dog, self).__init__(name, age)
self.sex = sex
def call(self):
print(self.name, '会“汪汪”叫')
# 我们定义一个 do 函数,接收一个变量 ‘all‘ 这里也就是三个类的对象
# 多态
# C 是 Cat 类型,
# C拥有自己的 call() 方法以及从 Animal 继承的 call 方法,
# 但调用 C .call() 总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止
# all是任何数据类型的实例都可以,只要它有一个 call() 的方法即可,不一定是 Animal 或 Animal 的子类型
def do(all):
all.call()
A = Animal('小黑', 4) # 定义三个类的对象
C = Cat('喵喵', 2, '男')
D = Dog('旺财', 5, '女')
# 调用各自的call方法 多态性
for x in (A, C, D):
do(x)
if __name__ == '__main__': # 单模块被引用时下面代码不会受影响,用于调试
pass
# c = Cat('喵喵', 2, '男') # Cat继承了父类Animal的属性
# c.call() # 输出 喵喵 会叫 ,Cat继承了父类Animal的方法

2、对象属性自动更新
# -*- coding:utf-8 -*-
#!python3
# -*- coding:utf-8 -*-
#!python3
# 第一种方法行不通
class DemoClss:
def __init__(self,val1,val2):
self.val1= val1
self.val2= val2
self.sum= self.val1 + self.val2
obj = DemoClss(123,234)
print(obj.sum)
obj.val1 = 321
print(obj.sum)
# 第二种方法采用函数调用的方法
class DemoClss:
def __init__(self,val1,val2):
self.val1= val1
self.val2= val2
def sum(self):
return self.val1 + self.val2
obj = DemoClss(123,234)
print(obj.sum()) # 调用函数
obj.val1 = 321
print(obj.sum()) # 调用函数
# 第三种方法采用函数调用的方法
class DemoClss:
def __init__(self,val1,val2):
self.val1= val1
self.val2= val2
@property # 属性
def sum(self):
return self.val1 + self.val2
obj = DemoClss(123,234)
print(obj.sum) # 对象的属性打印
obj.val1 = 321
print(obj.sum)
本文来自博客园,作者:变秃了也就变强了,转载请注明原文链接:https://www.cnblogs.com/lichangyi/p/18956748

浙公网安备 33010602011771号