python四十二:类和对象

类有数据属性和函数属性, 但对象只有数据属性。 

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("鲨鱼")

猜你喜欢

转载自blog.csdn.net/m0_37564426/article/details/83316621