python 19 面向对象以及类相关

# python 面向对象
# /usr/sbin/py/python
# -*-coding:utf8-*-
# python 中类和对象的定义
#    类:把一类事物的相同特征和动作整合到一起就是类,类是一个抽象的概念
#    对象:就是基于类而创建的一个具体的事物,把该事物的特征和动作整合到一起 具象
# python 不同于 java 和 c# 的应用 独特点可以通过函数来进行面向对象设计
def person(name, age, gender):
    def init(name, age, gender):
        return {
            "name": name,
            "age": age,
            "gender": gender,
            "run": fun_run
        }

    def fun_run(person):
        print("%s 在奔跑" % person["name"])

    return init(name, age, gender)

p1 = person("jake", 10, "mail")
print(p1)
p1["run"](p1)

# 面向对象编程 使用class 语法去实现面向对象的设计  面向对象设计其实并不会区分语语言,c编写的linux kernal同样是面向对象设计

# 声明一个类
class people:  # 类名
    '这是一个测试类'
    name = "jake"
    def run(self):
        print("%s is running" %self.name)
    pass # 类体

p1 = people() # 类的调用和接口调用方式一致,不同的是类是在实例化 且实例化会返回一个结果
print(p1)
print(p1.name)

# python2 中 class People:   与 class People(object): 是有区别的 前者是经典类,后者为新式类 ,在python3中一样
p1.run()
print(dir(people)) # 返回类中所包含的属性列表,包含默认属性
print(people.__dict__["name"])
print(people.__name__) # 类名
print(people.__doc__)  # 注释文档
print(people.__base__) # 继承的类
print(people.__bases__) # 以元组的形式显示
print(people.__module__) # 显示模块

# 对象实例化
class school :
    age = 10
    def __init__(self,name,address):
        print("init 函数执行")
        self.name = name
        self.address =address

    def teach(self):
        print("%s招生了" %self.name)


school1 =school("北大","北京")
school1.teach()
print(school1.__dict__) # 实例只有数据属性,而且是通过init方法赋予的 不存在函数属性
print(school.__dict__)
print(school.age)

print(school1.age)
school.country = "china"  # 增加类属性
print(school1.country)  # ? 为啥可以访问到?
# python 中有一个寻址的过程, 先在实例中去找,没有就会再到类中去找 相关的属性

del school.age # 删除属性  删除的属性再被调用则会报错

# 同理增加函数属性也是如此
def eat(self,food):
    print("%s正在吃%s" %(self.name,food))
school.eats = eat
school1.eats('apple')

# 值得注意的是 类属性和全局变量的使用,其实在python中类可以理解为一类特殊的函数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值