类有数据属性和函数属性, 但对象只有数据属性。
def funName(args):
'函数文档字符串'
函数体
class 类名:
'类的文档字符串'
类体
创建一个类
class foo:
pass
用类foo实例化一个对象
f = foo()
实例化干了什么事?
def dog(name, type, sex): # dog就是类 把一类事物相同的特征和动作整合到一起
def run(dog):
print("一条狗[%s],正在飞跑." % dog["name"])
def eat(dog):
print("一条狗[%s],正在啃骨头." % dog["name"])
def init(name, type, sex):
dog1 = {
"name": name,
"type": type,
"sex": sex,
"run": run,
"eat":eat
}
return dog1
return init(name, type, sex)
d1 = dog("旺财","藏獒","公") # d1就是对象
d1["eat"](d1)
d2 = dog("小白","牧羊犬","母")
d2["run"](d2)
可以通过def实现面向对象,也可以通过class实现面向对象. 要理解面向对象思想. 即使使用c语言也可以是实现面向对象设计
class Dog:
def __init__(self, name, gender, type):
self.name = name
self.gender = gender,
self.type = type
# 会自动将self返回
def run(self):
print("一条狗[%s],正在飞跑." % self.name)
def eat(self):
print("一条狗[%s],正在啃骨头." % self.name)
d1 = Dog("旺财","藏獒","公")
d1.run()
d2 = Dog("小白","牧羊犬","母")
d2.eat()
# 类相关知识
class China:
'这是一个类'
capital = "北京" # 数据属性 静态变量
def develop(self): # 函数属性 也可以称为方法
print("中国国立发展很快")
def log():
print("登录月球成功")
print(dir(China)) # 查看类的属性
print(China.__dict__) # 查看类的属性字典
print(China.capital) # 取 __dict__字典['capital']的数据
print(China.__dict__['capital'])
China.log()
China.__dict__['log']()
print(China.__base__) # 所有类都有一个共同的祖先:object
print(China.__bases__) # 以元祖的形式
print(China.__module__) # 类所在的模块
print(China.__class__) # 实例所对应的类
增删改查类数据属性,函数属性
class Fish:
name = "鱼" #静态变量
def __init__(self, type):
self.type = type
def swim(self):
print("正在海里游泳")
def eat(self):
print("正在吃食")
f = Fish("鲸鱼")
# 数据属性
# 查看类属性
print(Fish.name)
# 修改类属性
Fish.name = "一条鱼"
print(Fish.name)
# 增加类属性
Fish.home = "水"
print(Fish.home)
# 修改类属性
del Fish.name
# print(Fish.name) 会报错 AttributeError: type object 'Fish' has no attribute 'name'
print(f.home)
print(Fish.__dict__)
# 函数属性
# 增加函数属性
def sleep():
print("鱼正在睡觉..")
Fish.sleep = sleep # 增加一个函数属性
Fish.sleep()
# 修改函数属性
def eat_food():
print("鱼正在欢快的吃食")
Fish.eat = eat_food
del Fish.swim # 删除函数属性
# f.swim() 调用报错
增删改查实例数据属性
class Fish:
name = "鱼" #静态变量
def __init__(self, type):
self.type = type
def swim(self):
print("正在海里游泳")
def eat(self):
print("正在吃食")
f = Fish("鲸鱼")
f2 = Fish("鲨鱼")
# 实例数据属性增删改查
# 查看
print(f.name)
print(f.eat)
f.eat()
# 增加
f.age = 1
print(f.age) # age属性只增加在f实例中
#print(f2.age)
# 修改
f.age = 2
print(f.age)
# 删除
del f.age
#print(f.age)
print(f.__dict__)
实例,类中的数据属性同名
class Fish:
name = "鱼" #静态变量
def __init__(self, type):
self.type = type
f = Fish("鲨鱼")
print(f.name,f.type)
print(f.__dict__)
f.name = "乌鱼" # 将name添加到f实例自己的__dict__字典中,与类没有关系
print(f.__dict__)
print(f.name, Fish.name)
注意点:
name = "鱼" #静态变量
class Fish:
def __init__(self, type):
self.type = type
# 不是通过 实例名.name 或 类名.name调用属性的,就不从__dict__字典中找
# 找到类外面的作用域中的name
print("----",name)
f = Fish("鲨鱼")
name = "鱼"
class Fish:
name = "大鱼"
def __init__(self, type):
self.type = type
# 不是通过 实例名.name 或 类名.name调用属性的,就不从__dict__字典中找
# 找到类外面的作用域中的name
print("----",name)
f = Fish("鲨鱼")