# class Ren(object):
# name = '人'
# high = '一人高'
# wight = '一人重'
# # 私有属性
# __money = '我有十块钱'
# __age = 20
# def run(self):
# print(self.name)
# print('跑步')
# def say(self):
# lie = '我很欣赏你'
# print(self.__money)
# print(lie)
# # 私有调用 在函数内进行调用
# self.__lie()
# # 私有方法
# def __lie(self):
# lie = '我很欣赏你'
# print(lie)
# # 获取私有属性的值
# def get(self,g):
# if g == 'money':
# return self.__money
# else:
# return self.__age
# # 设置值
# def set(self,g):
# self.__age = g
# # 被 classmethod() 函数处理过的函数 能被类所调用也能被对象所调用
# # 消耗低 动态方法
# # 这种形式叫 装饰器
# # @classmethod
# def moRi(self):
# print('世界末日')
# # 被 classmethod() 函数处理过的函数 能被类所调用也能被对象所调用
# # 这种形式叫 函数转换
# mr = classmethod(moRi)
# # 静态方法 通过staticmethod() 定义静态方法没有self语句
# # 静态方法速度快
# # @staticmethod
# def roRi():
# print('世界末日吗')
# ro = staticmethod(roRi)
# if __name__ == '__main__':
# zhangsan = Ren()
# print(zhangsan.say())
# print(zhangsan.get('money'))
# print(zhangsan.get('age'))
# print(zhangsan.set(30))
# print(zhangsan.get('age'))
# print(zhangsan.name)
# Ren.mr()
# Ren.ro()
# 私有方法不能再外部访问
# print(zhangsan.__lie)
# 方法的定义
# 和函数定义一样 但是需要self作为第一个参数
# 类方法也分为 公有方法和私有方法
# 私有方法: 不能被外部的类和方法调用,私有方法的定义和私有属性的定义都一样,在方法的前面
# 加上 __ 双下划线就可以了
# 类方法 被 classmethod() 函数处理过的函数 能被类所调用也能被对象所调用
# 静态方法: 相当于 全局函数 可以被类直接调用 可以被所有实例对象共享
# 通过staticmethod() 定义静态方法没有self语句
# self 参数:
# 用于区分函数和类的方法 self 参数表示指向对象本身
# python 对象高级
# 内部类 与 魔术方法
# 所谓的内部类 就是在类的内部定义的类
# 主要目的是为了更好的抽象现实世界
class Milo():
class Test():
var1 = '我是内部类'
# 构造函数 在实例化的时候调用
def __init__(self):
print('你好,我是构造函数')
# 在使用类的时候 会自动触发
def __str__(self):
return '我是Milo类的实例化的对象'
# 析构函数 在释放的时候调用
def __del__(self):
print('我是析构函数')
# 怎么调用类中的内部类
milo = Milo()
test = milo.Test()
print(test.var1)
# 这样比较复杂 所以
test = Milo.Test()
print(test.var1)
print(milo)
# 类的继承
# 面向对象的变成带来的主要好吃之一就是代码重用 实现这种重用方法之一通过继承机制
# 通过继承创建的心类 称为子类或派生类 被继承的类称为基类 父类 或者 超类
# 继承语法
# 如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法 或者补充协议父类的构造方法
# 在调用基类的方法时 需要加上基类的类名前缀 且需要带上self参数变量 区别在于类中调用普通函数时
# 并不需要带上 self参数
class Whl(Milo):
def __init__(self):
print('子类的构造方法')
whl = Whl()
print(whl)
网友评论