Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Composition question
#1
Hi, I'm testing composition, and I don't understand the output in the log file.

Here is the script:

import os
import time
import logging
import datetime


class Logger:
    logging.basicConfig(filename=datetime.datetime.today().strftime("%Y_%m_%d.log"),
                        format='%(asctime)s %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S',
                        level=logging.INFO)

    @staticmethod
    def log2file(message):
        logging.info(message)


class Folder:
    _path = ''
    _files = []

    def __init__(self, path):
        if not os.path.exists(path):
            message = "folder does not exist"
            raise TypeError(message)

        self.path = path


class Source:
    def __init__(self, path):
        self.path = Folder(path)
        Logger.log2file("{} as source folder added".format(self.path))


class Destination:
    def __init__(self, path):
        self.path = Folder(path)
        Logger.log2file("{} as source folder added".format(self.path))

class XLSBackup:
    pass


s = Source('/home/kz/a')
The output in the log file is like this:
2020-01-07 10:55:56 <__main__.Folder object at 0x7f4af2ff9390> as source folder added

But I expected this:
2020-01-07 10:55:56 /home/kz/a as source folder added
Reply
#2
Source.path is instance of Folder class.
Folder class has no __repr__ or __str__ methods defined.
Read https://docs.python.org/3/reference/data...t.__repr__
https://docs.python.org/3/reference/data...ct.__str__

define Folder.__str__ method or as alternative use Logger.log2file("{} as source folder added".format(self.path.path))
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
Just to note that defining THAT much classes is not necessary, e.g. Source and Destination classes are virtually the same and almost the same as Folder
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#4
Hi, thanks, I implemented __str__, and now it works lik a charm.

class Folder:
    _path = ''
    _files = []

    def __init__(self, path):
        if not os.path.exists(path):
            message = "folder does not exist"
            raise TypeError(message)

        self.path = path

    def __str__(self):
        return self.path

(Jan-07-2020, 11:06 AM)buran Wrote: Just to note that defining THAT much classes is not necessary, e.g. Source and Destination classes are virtually the same and almost the same as Folder

I know that, but it's just a composition testing. In the end there wont be 3 classes. Smile
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020