Java转python学习笔记-面向对象

# 面向对象
class People:
    classdx = '类变量'#不依赖对象,使用于类的全局修改
    def __init__(self,name,age):#初始化属性
        self.name = name#对象变量
        self.age = age
        self.sex = 15

    def dxmethod(self):#对象方法类不能调用
        print(self)

    @classmethod
    def classfunction(cls):#类方法,对象不能使用,在对象创建之间需要的功能
        print(cls)#<class '__main__.People'>

    @staticmethod
    def staticfunction():#静态方法 可以访问类变量和方法
        print('不用参数的类方法')
        print('类似类方法的表达 ' + People.classdx)

    def __call__(self,mes):
        print(mes)

    def __new__(cls, *args, **kwargs):
        print('在实例化对象时触发')
        position = object.__new__(cls)
        return position

    def __del__(self):#触发时机 对象没有被引用了   或者   在程序每次运行完  不需要重写
        print('删除{}'.format(self))

    def __str__(self):#自定义打印对象时显示的信息
        return self.name+str(self.age)

a = People('张三',18)
print(a.name)
# print(a.age)

People.classfunction()

print(People.classdx)
People.classdx = '修改全局类变量'
print(People.classdx)

People.staticfunction()
a('把对象当成函数调用')

a1 = a#对象的引用,完全等同

import sys
print(sys.getrefcount(a))#查看对象被引用次数 运行本条语句也算次数
del a1
print(sys.getrefcount(a))

print(a)#张三18

class student:
    def __init__(self,name):
        self.name = name
        self.__age = 18#私有化年龄

    def __str__(self):
        return str(self.__age)

    # def setAge(self,age):#可以设置变量的取值范围
    #     self.__age = age
    #
    # def getAge(self):
    #     return self.__age

    @property#set and get 优化方法
    def age(self):
        return self.__age

    @age.setter
    def age(self,age):
        self.__age = age

s = student('李四')
s.__age = 19#修改没用
print(s)

# s.setAge(20)#修改
# print(s.getAge())

s.age = 100
print(s.age)#不用__

# print(s.age)私有化后不能访问等于没有这个对象变量
print()

print(s.__dir__())#查看对象的方法和属性

# 继承
class Computer:
    def __init__(self,name,price):
        self.name = name
        self.price = price

    def play(self):
        print('玩电脑')

class Mouse(Computer):#继承Computer
    def __init__(self,name,price,brand):
        super().__init__(name, price)  # 再调用父类
        self.brand = brand#子类特有的
        super(Mouse, self).play()#调用父类方法


m = Mouse('罗技鼠标',1000,'罗技')
print(m.name)
m.play()

# 多继承
class A:
    def test(self):
        print('AAA')


class B(A):
    def test(self):
        print('BBB')


class C(A):
    def test(self):
        print('CCC')

class D(B,C):
    def test(self):
        print('DDD')

d = D()
d.test()#就近原则  DBCA  从左到右 广度优先
print(D.__mro__)#打印搜索顺序

# 多态

class People:

    def __init__(self,name):
        self.name = name

    def feed(self,pet):
        if isinstance(pet,Pet):#判断具体的多态类型
            print('{}在喂{}'.format(self.name, pet.name))
        else:
            print('{}会吃人'.format(pet.name))

class Pet:
    def __init__(self,name):
        self.name = name
    def run(self):
        print(self.name + '在跑')

class Cat(Pet):
    pass

class Tigter:
    def __init__(self,name):
        self.name = name

people = People('张三')
pet = Pet('李四')
cat = Cat('王五')
tiger = Tigter('赵六')
people.feed(pet)
people.feed(cat)
people.feed(tiger)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值